推送预填充数组阵列设置所有元素

时间:2018-02-24 13:25:59

标签: javascript arrays fill

我正在努力应对一种奇怪的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']

数组中的所有项都填充了此字符串。我假设所有[]数组都指向同一个数组,但我不明白为什么,有人能解释一下吗?

1 个答案:

答案 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}, ()=>[]);