推送到嵌套数组中的一个元素是添加到 javascript 中的所有元素
Pushing to one element in a nested array is adding to all elements in javascript
我正在创建一个预填充的嵌套数组并希望将元素推送到特定索引,但这些元素正在添加到所有索引。
let arr = new Array(4).fill([])
arr => Array(4) [ [], [], [], [] ] //this is what I want
arr[0].push(3)
arr => Array(4) [ [3], [3], [3], [3] ] //I only wanted to push 3 to first index,
//why do all indexes have this element?
任何有关如何仅更新一个索引的帮助将不胜感激。
let arr = new Array(4).fill([])
这是将 arr
创建为一个数组,其中包含 四个对同一数组的引用 ([]
作为参数传递)。因此,修改任何引用都会修改底层数组,并且由于所有引用都引用了它,因此您在记录对象时会注意到这一点。
> arr[0] === arr[1]
< true
只需使用一个好的 ol' for
,或者如果我们只谈论 4 个元素,甚至可以简单地 [[],[],[],[]]
。
let arr = new Array(4)
for (let i = 0; i < arr.length; i++)
arr[i] = new Array()
> arr[0] === arr[1]
< false
这种初始化方法给出了一个长度为 4 的数组,每个元素中都有一个空数组:
[...Array(4)].map(() => []); // [[], [], [], []]
或者例如您可以使用
[...Array(4)].map((_, i) => i); // and get [0, 1, 2, 3]
我正在创建一个预填充的嵌套数组并希望将元素推送到特定索引,但这些元素正在添加到所有索引。
let arr = new Array(4).fill([])
arr => Array(4) [ [], [], [], [] ] //this is what I want
arr[0].push(3)
arr => Array(4) [ [3], [3], [3], [3] ] //I only wanted to push 3 to first index,
//why do all indexes have this element?
任何有关如何仅更新一个索引的帮助将不胜感激。
let arr = new Array(4).fill([])
这是将 arr
创建为一个数组,其中包含 四个对同一数组的引用 ([]
作为参数传递)。因此,修改任何引用都会修改底层数组,并且由于所有引用都引用了它,因此您在记录对象时会注意到这一点。
> arr[0] === arr[1]
< true
只需使用一个好的 ol' for
,或者如果我们只谈论 4 个元素,甚至可以简单地 [[],[],[],[]]
。
let arr = new Array(4)
for (let i = 0; i < arr.length; i++)
arr[i] = new Array()
> arr[0] === arr[1]
< false
这种初始化方法给出了一个长度为 4 的数组,每个元素中都有一个空数组:
[...Array(4)].map(() => []); // [[], [], [], []]
或者例如您可以使用
[...Array(4)].map((_, i) => i); // and get [0, 1, 2, 3]