如何从 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.stringify
和 parse
的解决方案,但这个对象很大,我不知道这将扮演谁。
下面这个例子也不起作用:
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)
我在 ractive.js 中有一个应用程序,我需要从我的组件状态创建一些数据的副本。 示例:
const dateGroups = this.get("dateGroups");
this.set("editedPickups.beforeEdit", dateGroups);
而且我需要删除针对“dateGroups”的“editedPickups.beforeEdit”的引用,因为如果我更改“dateGroups”中的某些内容,它也会在“editedPickups.beforeEdit”中更改。
我找到 JSON.stringify
和 parse
的解决方案,但这个对象很大,我不知道这将扮演谁。
下面这个例子也不起作用:
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)