Вы просматриваете массив 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;
});
Каждый раз, когда вы видите один из этих объектов, вы перезаписываете id
свойство того же объекта , поэтому, когда вы регистрируете их, они имеют одинаковый идентификатор.
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;
})
// these are the same objects:
console.log("0 & 1 Same reference?", result[0].children[0].children[0] === result[1].children[0].children[0])
console.log("1 & 2 Same reference?", result[1].children[0].children[0] === result[2].children[0].children[0])