从另一个对象创建新对象而不持久更改

时间:2018-01-25 18:06:33

标签: javascript vue.js

我使用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()

4 个答案:

答案 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)找到了一个解决方案;但是我还是想知道这叫什么,所以我能更好地理解这种反应。

由于