Javascript中对象数组引用的数组

Javascript中对象数组引用的数组,javascript,arrays,reference,underscore.js,Javascript,Arrays,Reference,Underscore.js,我有一个数组,如下所示 var sample = [{a:1, b: 1, c:1}, {a:1, b: 1, c:1}, {a:1, b: 1, c:1}]; 然后,我运行以下代码并尝试groupsOfItems[0]。示例[0]。a=10,groupsOfItems[0]。示例[0]。a,groupsOfItems[1]。示例[0]。a和groupsOfItems[2]。示例[0]。a更改为10 我如何防止这种情况 var-sample=[{a:1,b:1,c:1},{a:1,b:1,c

我有一个数组,如下所示

var sample = [{a:1, b: 1, c:1}, {a:1, b: 1, c:1}, {a:1, b: 1, c:1}];
然后,我运行以下代码并尝试
groupsOfItems[0]。示例[0]。a=10
groupsOfItems[0]。示例[0]。a
groupsOfItems[1]。示例[0]。a
groupsOfItems[2]。示例[0]。a
更改为10

我如何防止这种情况

var-sample=[{a:1,b:1,c:1},{a:1,b:1,c:1},{a:1,b:1,c:1}];
var groupsOfItems=[];
for(设i=0;i<10;i++){
var item={};
item.sample=\ u0.clone(sample);
groupsOfItems.push(项目);
}
groupsOfItems[0]。示例[0]。a=10
console.log(groupsOfItems[0]。示例[0]。a,groupsOfItems[1]。示例[0]。a,groupsOfItems[2]。示例[0]。a)

在将对象的引用分配给数组的属性之前,需要克隆该对象

替换

item.sample = sample;

请注意,当示例对象增长时,这种克隆方法的效率会降低。尝试显示的其他方法。

for(设i=0;i<10;i++){
var item={};
item.sample=$.extend(true,[],sample);
groupsOfItems.push(项目);
}

我通常会避免克隆对象。克隆对象只会在以后的过程中带来痛苦。以下是我过去在没有克隆的情况下实现类似目标的方式

var sample = [{   a: 1,   b: 1,  c: 1}, {  a: 1,  b: 1,  c: 1}, {  a: 1,  b: 1,  c: 1}];
var groupsOfItems = [];

var Item = function(a, b, c) {
  this.a = a;
  this.b = b;
  this.c = c;
}

for (let i = 0; i < 10; i++) {
  var item = {};
  item.sample = _.map(sample, function(item) {
    return new Item(item.a, item.b, item.c)
  });
  groupsOfItems.push(item);
}

groupsOfItems[0].sample[0].a = 10

console.log(groupsOfItems[0].sample[0].a, groupsOfItems[1].sample[0].a, groupsOfItems[2].sample[0].a);
//10 1 1
var-sample=[{a:1,b:1,c:1},{a:1,b:1,c:1},{a:1,b:1,c:1}];
var groupsOfItems=[];
变量项=功能(a、b、c){
这个a=a;
这个.b=b;
这个.c=c;
}
for(设i=0;i<10;i++){
var item={};
item.sample=\映射(示例,函数(项){
返回新项目(项目a、项目b、项目c)
});
groupsOfItems.push(项目);
}
groupsOfItems[0]。示例[0]。a=10
console.log(groupsOfItems[0]。示例[0]。a,groupsOfItems[1]。示例[0]。a,groupsOfItems[2]。示例[0]。a);
//10 1 1

通过这种方式,您可以为它们分配一个用于修改的容器,克隆的问题就消失了。

我确实尝试过使用u.clone。没有help@JaseemAbbas你试过我的方法了吗shared@JaseemAbbas
\uux.clone()
是一个浅拷贝。JSON方法进行深度克隆。u.cloneDeep()保存了我的一天。干杯我为您创建了一个片段。请以后再这样做。在测试代码时可以节省大量时间。请小心使用库(或仅在一般情况下)克隆对象。如果对克隆对象调用方法,该方法仍将引用原始对象,并将修改原始对象,而不是克隆对象。
for(let i = 0; i < 10; i++) {
        var item = {};
        item.sample = $.extend(true, [], sample);
        groupsOfItems.push(item);
    }
var sample = [{   a: 1,   b: 1,  c: 1}, {  a: 1,  b: 1,  c: 1}, {  a: 1,  b: 1,  c: 1}];
var groupsOfItems = [];

var Item = function(a, b, c) {
  this.a = a;
  this.b = b;
  this.c = c;
}

for (let i = 0; i < 10; i++) {
  var item = {};
  item.sample = _.map(sample, function(item) {
    return new Item(item.a, item.b, item.c)
  });
  groupsOfItems.push(item);
}

groupsOfItems[0].sample[0].a = 10

console.log(groupsOfItems[0].sample[0].a, groupsOfItems[1].sample[0].a, groupsOfItems[2].sample[0].a);
//10 1 1