如何从 JavaScript 中的对象中删除引用

How to remove reference from object in JavaScript

我在 ractive.js 中有一个应用程序,我需要从我的组件状态创建一些数据的副本。 示例:

const dateGroups = this.get("dateGroups");
this.set("editedPickups.beforeEdit", dateGroups);

而且我需要删除针对“dateGroups”的“editedPickups.beforeEdit”的引用,因为如果我更改“dateGroups”中的某些内容,它也会在“editedPickups.beforeEdit”中更改。 我找到 JSON.stringifyparse 的解决方案,但这个对象很大,我不知道这将扮演谁。 下面这个例子也不起作用:

const dateGroups = Object.assign({}, this.get("dateGroups"));

您发布的示例将不起作用,因为 Object.assign 将浅拷贝对象(嵌套的 props 仍将保留对原始对象的引用)。您可以使用 lodash.cloneDeep().

您可以使用传播语法来创建新的瞬间

// if dateGroups is an array
this.set("editedPickups.beforeEdit", [...dateGroups]);
// if dateGroups is an object
this.set("editedPickups.beforeEdit", {...dateGroups});

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax

使用 ES6,您可以使用 ... 语法删除对象引用。

const objectWeWantToCopyButNotReference = {
  foo: 'bar'
}

const myNewObject = { ...objectWeWantToCopyButNotReference }

myNewObject.foo = 'not bar'

console.log('my new object has changed:', myNewObject.foo)

console.log('original object not changed: ', objectWeWantToCopyButNotReference.foo)