我不确定我的代码有什么问题,在嵌套的for循环中值已被覆盖,请帮我调试以下代码。 var1是一个包含另一个名为list的数组的数组。 Var2也是一个数组,每个var2.data等于var1。我试图设置每个var2.data的list.id = var2.index,但由于某种原因,var2中的所有list.id都等于2,似乎该值已被覆盖。请参阅以下内容:
let var1 = [{
'name': 'name1',
'list': [{
id: 0,
a: "test1",
b: 'test2'
},
{
id: 0,
a: "aac",
b: 'test2'
},
{
id: 0,
a: "aad",
b: 'test2'
},
]
},
{
'name': 'name2',
'list': [{
id: 0,
a: "test1",
b: 'test2'
},
{
id: 0,
a: "aac",
b: 'test2'
},
{
id: 0,
a: "aad",
b: 'test2'
},
]
}
];
let var2 = [{
claim: 'claim1',
ifn: '1',
data: []
},
{
claim: 'claim2',
ifn: '2',
data: []
},
{
claim: 'claim3',
ifn: '3',
data: []
},
]
var2.forEach((item, i) => {
var1.forEach(list => {
list.list.forEach(val => {
val.id = i;
})
item.data = list;
})
})
console.log(var2)
我想让每个list.id等于var2的索引,如下所示,真的不知道如何让这段代码工作,请帮忙〜
var2 = [
{ claim:'claim1',ifn:'1',
data:
[{
'name':'name1',
'list':[
{id:0,a:"test1",b:'test2'},
{id:0,a:"aac",b:'test2'},
{id:0,a:"aad",b:'test2'},
]
},
{
'name':'name2',
'list':[
{id:0,a:"test1",b:'test2'},
{id:0,a:"aac",b:'test2'},
{id:0,a:"aad",b:'test2'},
]
}]
},
{ claim:'claim2',ifn:'2',
data:
[{
'name':'name1',
'list':[
{id:1,a:"test1",b:'test2'},
{id:1,a:"aac",b:'test2'},
{id:1,a:"aad",b:'test2'},
]
},
{
'name':'name2',
'list':[
{id:1,a:"test1",b:'test2'},
{id:1,a:"aac",b:'test2'},
{id:1,a:"aad",b:'test2'},
]
}]
},
{ claim:'claim3',ifn:'3',
data:[{
'name':'name1',
'list':[
{id:2,a:"test1",b:'test2'},
{id:2,a:"aac",b:'test2'},
{id:2,a:"aad",b:'test2'},
]
},
{
'name':'name2',
'list':[
{id:2,a:"test1",b:'test2'},
{id:2,a:"aac",b:'test2'},
{id:2,a:"aad",b:'test2'},
]
}]
}
]
答案 0 :(得分:0)
根据我的理解,您希望var2中的每个data
值都指向var1。以下循环将执行此操作:
var2.forEach(item => item.data = var1);
但是,因为每个项目指向同一个对象,这意味着如果您更改var2中的任何data
项目,它将更改所有项目。
如果您需要副本是唯一的,您可以使用以下内容制作新副本:
const getVar1 = () => [
{
'name': 'name1',
'list': [
{
id: 0,
a: "test1",
b: 'test2'
},
{
id: 0,
a: "aac",
b: 'test2'
},
{
id: 0,
a: "aad",
b: 'test2'
},
]
},
...
];
然后你可以像这样使用它:
var2.forEach(item => item.data = getVar1())
答案 1 :(得分:0)
您需要创建新副本。但渴望结果你可以使用这段代码 -
for (var i = 0; i < var2.length; i++) {
var el = var2[i], arr = [];
for (var j = 0; j < var1.length; j++) {
var o = var1[j];
for (var k = 0; k < o.list.length; k++) {
var ob = o.list[k];
console.log(ob);
ob.id = i;
}
arr.push(o);
}
el.data = arr;
}