最近,我在尝试创建三级深度嵌套数组。我知道很疯狂,但这是我能想到的解决问题的最好办法。使用以下代码创建数组。
const lengths = [2, 3];
const arrays = lengths.map((v, i) => {
return Array(lengths[i]).fill([]);
});
arrays[0][0].push(1);
console.log(arrays);
// Expected: [ [ [ 1 ], [] ], [ [], [], [] ] ]
// Actual: [ [ [ 1 ], [ 1 ] ], [ [], [], [] ] ]
如您所见,我只推到数组[0][0]。然而,[0][0]和[0][1]都被推到。这是怎么回事?它是一个bug,还是一个特性?某种奇怪的内存管理?
如果有用的话,我正在使用node.js。提前道谢。
您正在用相同的数组引用填充整个数组。相反,您可以使用array.from
的映射回调来纠正这个问题,每次返回一个不同的数组。
null
const lengths = [2, 3];
const arrays = lengths.map((v, i) => {
return Array.from({length: lengths[i]}, _=>[]);
});
arrays[0][0].push(1);
console.log(arrays);
.as-console-wrapper{top:0;max-height:100%!important}