Array.fill与赋值时的文字2D定义不同

时间:2016-02-03 15:02:22

标签: javascript arrays

早些时候我一直在试用Array.fill函数,使自己成为一个填充全零的9x9二维数组,然后我想更新[3] [4]值。并且bam,为第一维中的每个键的所有第四个键更新值([0] [4],[1] [4],...)。

我花了一段时间来弄明白,但似乎Array.fill在定义上与文字2D数组定义有所不同,或者它是什么?因为那时我不再确定我是否遗漏了任何东西。

var arr1 = new Array(9).fill(new Array(9).fill(0));
arr1[3][4] = 1;
console.log(arr1);
//Every fourth key of the 2nd dimension are replaced with 1.
var arr2 = [
    [0, 0, 0, 0, 0, 0, 0, 0, 0], 
    [0, 0, 0, 0, 0, 0, 0, 0, 0], 
    [0, 0, 0, 0, 0, 0, 0, 0, 0], 
    [0, 0, 0, 0, 0, 0, 0, 0, 0], 
    [0, 0, 0, 0, 0, 0, 0, 0, 0], 
    [0, 0, 0, 0, 0, 0, 0, 0, 0], 
    [0, 0, 0, 0, 0, 0, 0, 0, 0], 
    [0, 0, 0, 0, 0, 0, 0, 0, 0], 
    [0, 0, 0, 0, 0, 0, 0, 0, 0]    
];
arr2[3][4] = 1;
console.log(arr2);
//Only the third key of first dimension to fourth key of 2nd is replaced with 1.

更新 这实际上为我开辟了一条好方法,让我学会了一些我宁愿知道但不遵守原因或方法的东西。但是,我认为这个问题现在会扩展到“程序员”,而不是这次编码本身。

1 个答案:

答案 0 :(得分:1)

请参阅<{p}}上的Array.prototype.fill()

  

fill方法是一个可变方法,它会改变这个对象   本身,并返回它,而不仅仅是返回它的副本。

解决方法可能是使用forwhile循环

&#13;
&#13;
var arr1 = Array(9);
for (var i = 0, n = 0; i < arr1.length; i++) {
  // create a new array object at index `i` of `arr1`
  arr1[i] = [];
  while (arr1[i].length < arr1.length) {
    // fill array at index `i` of `arr1` with value of `n` : `0`
    arr1[i][arr1[i].length] = n
  }
}

arr1[3][4] = 1;

document.querySelector("pre").textContent = JSON.stringify(arr1, null, 2)
&#13;
<pre></pre>
&#13;
&#13;
&#13;