我正在尝试循环3个数组并生成一组具有唯一ID的孩子
但是由于某些原因,属性id
不能获得唯一值(请参阅控制台结果)
我尝试了各种方式,例如使用forEach
,使用closures
,使用局部变量。他们都没有工作。
const alpha = [{ name: 'AAA', value: 'a' }, { name: 'BBB', value: 'b' }, { name: 'CCC', value: 'c' }],
numeric = [{ name: 'ONE', value: '1' }, { name: 'TWO', value: '2' }, { name: 'THREE', value: '3' }],
symbol = [{ name: 'AT', value: '@' }, { name: 'HASH', value: '#' }, { name: 'DOLLAR', value: '$' }];
const result = alpha.map(a => {
a.children = numeric.map(n => {
n.children = symbol.map(s => {
s.id = a.value + n.value + s.value;
return s;
});
n.id = a.value + n.value;
return n;
});
a.id = a.value;
return a;
})
console.log(result[0].children[0].children[0].id) // should be "a1@"
console.log(result[1].children[0].children[0].id) // should be "b1@"
console.log(result[2].children[0].children[0].id) // should be "c1@"
答案 0 :(得分:2)
问题在于您正在修改输入对象,因此同一s
被多次修改。这就是为什么您只在ID中看到最后alpha
和numeric
的原因-它们最后运行,所以最后一个修改共享库的对象。
要解决此问题,请返回一个带有您ID的 new 对象,并且一切都会很好:
const alpha = [{ name: 'AAA', value: 'a' }, { name: 'BBB', value: 'b' }, { name: 'CCC', value: 'c' }],
numeric = [{ name: 'ONE', value: '1' }, { name: 'TWO', value: '2' }, { name: 'THREE', value: '3' }],
symbol = [{ name: 'AT', value: '@' }, { name: 'HASH', value: '#' }, { name: 'DOLLAR', value: '$' }];
const result = alpha.map(a => {
a.children = numeric.map(n => {
n.children = symbol.map(s => {
return { ...s, id: a.value + n.value + s.value };
});
return { ...n, id: a.value + n.value };
});
return { ...a, id: a.value };
})
console.log(result[0].children[0].children[0].id) // should be "a1@"
console.log(result[1].children[0].children[0].id) // should be "b1@"
console.log(result[2].children[0].children[0].id) // should be "c1@"
答案 1 :(得分:1)
您多次在数组symbols
上进行映射,但是每次都获得对相同对象的引用:
symbol.map(s => { // s is always a reference to the same set of objects object
s.id = a.value + n.value + s.value;
return s;
});
每次看到这些对象之一时,都会覆盖同一对象的<{>> {1>}属性,因此,当您记录它们时,它们具有相同的ID。
id