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