我使用Array作为一些基本样板对象的容器,可以将其复制并添加到另一个Array中然后进行修改。问题是当我分配对象的新数组所有权时,任何更改都会持续到原始对象(不应该更改)。
一个例子:
var originals = [{ name: "One", value: 1 }, { name: "Two", value: 2 }, { name: "Three", value: 3 }];
var notOriginal = [];
notOriginal.push(originals[0]);
// THIS GIVES ME - notOriginal = [{ name: "One", value: 1 }];
notOriginal[0].name = "Uno";
// THIS RESULTS IN - originals = [{ name: "Uno", value: 1 },...];
我试图保留"原件"变量相同 - 它不应该改变。
我已经搜索了很多东西并尝试了一些但不确定在哪里找到解决方案。
具体来说,这发生在VueJS中,而对象在我的data()
中答案 0 :(得分:2)
使用JSON.parse
& JSON.stringify
var originals = [{
name: "One",
value: 1
}, {
name: "Two",
value: 2
}, {
name: "Three",
value: 3
}];
var notOriginal = [];
notOriginal.push(JSON.parse(JSON.stringify(originals[0])));
notOriginal[0].name = "Uno";
console.log(originals)

答案 1 :(得分:1)
您可以使用Object.assign
制作对象的副本。
var originals = [{
name: "One",
value: 1
}, {
name: "Two",
value: 2
}, {
name: "Three",
value: 3
}];
var notOriginal = [];
notOriginal.push(Object.assign({}, originals[0]));
notOriginal[0].name = "Uno";
console.log(originals);

答案 2 :(得分:1)
Objects are passed by reference.
为了复制一个对象,你可以使用Object.assign({}, obj)
来返回一个带有obj中重复属性的新对象。
var originals = [{ name: "One", value: 1 }, { name: "Two", value: 2 }, { name: "Three", value: 3 }];
var notOriginal = originals.map(obj => Object.assign({}, obj));
notOriginal[0].name = "bart";
console.log(originals[0], notOriginal[0]);

答案 3 :(得分:0)
我通过使用jQuery.extend(true,{},myObj)找到了一个解决方案;但是我还是想知道这叫什么,所以我能更好地理解这种反应。
由于