将对象内容数组分配给新数组

时间:2016-06-20 23:40:18

标签: javascript arrays object concat

我试图将一个对象数组分配给另一个数组,但是当我创建新数组时,在其他函数中我更改了它的值,原始数组也发生了变化(这是不正常的)。我可以用另一种方式吗? 这是一个例子:http://codepen.io/Xiwi/pen/rLMbYp

3 个答案:

答案 0 :(得分:3)

看起来您需要复制/克隆数组,以便它不会被引用更改。

如果阵列中只有 Primitive Types ,您可以这样做:

var test3 = JSON.parse(JSON.stringify(test2));

否则你需要一个递归的解决方案,并在你的问题中更具体。

示例:

var test1 = [{name: 'test1'}];
var test2 = [{name: 'test2'}];
var test3 = JSON.parse(JSON.stringify(test2));

test3[0].name = 'test3';

// Open console
console.log('Test2: ',test2[0]); // Object {name: "test2"}
console.log('Test3: ',test3[0]); // Object {name: "test3"}

答案 1 :(得分:0)

对象本质上是引用。您必须创建一个新对象并分配另一个对象的值:

var test3 = [ Object.assign({}, test2[0]) ];

答案 2 :(得分:0)

使用简单的.map将一个对象数组复制到另一个对象。

var test1 = [{name: 'test1'}];
var test2 = [{name: 'test2'}];
//var test3 = test2.slice(0); //doesn't work. objects are still references
var test3 = test2.map(function(obj){
  //return obj; //doesn't work. objects are still references
  var o={}; //create brand new object
  for(var prop in obj)
    o[prop]=obj[prop];//assign properties
  return  o;//works
});

test3[0].name = 'test3';

// Open console
console.log('Test2: ',test2[0]);
console.log('Test3: ',test3[0]);