我正在努力应对一种奇怪的Array.prototype.fill
行为:
const arr = new Array(5)
.fill([]);
arr[0].push('element pushed to 0 only');
console.log(arr[1]); // ['element pushed to 0 only']
数组中的所有项都填充了此字符串。我假设所有[]
数组都指向同一个数组,但我不明白为什么,有人能解释一下吗?
答案 0 :(得分:1)
在fill([])
中,在调用[]
之前评估参数fill
。
与
相同const subarray = [];
const arr = new Array(5);
arr.fill(subarray);
与
相同const subarray = [];
const arr = new Array(5);
for (var i=0; i<arr.length; i++) arr[i] = subarray;
换句话说,所有索引都有相同的子数组:arr[1]
为arr[0]
。
如果你想拥有不同的子阵列,你可以做
const arr = Array.from({length:5}, ()=>[]);