为什么Array.prototype.push()在JavaScript中的2D数组上两次添加元素?

时间:2018-10-19 16:26:41

标签: javascript arrays multidimensional-array

我编写了以下函数,以将列和行添加到2D数组中:

function addColumns(array, number, value) {
  array.push(...new Array(number).fill(new Array(array[0].length).fill(value)));
  return array;
}

function addRows(array, number, value) {
  array.map((e) => { e.push(...new Array(number).fill(value)); return e; });
  return array;
}

现在我想在2x2数组上使用它们:

let myArray = [...new Array(2)].map(() => new Array(2).fill('a'));
console.log(`init:            ${JSON.stringify(myArray)}`);
myArray = addColumns(myArray, 2, 'b');
console.log(`added 2 columns: ${JSON.stringify(myArray)}`);
myArray = addRows(myArray, 2, 'c');
console.log(`added 2 rows:    ${JSON.stringify(myArray)}`);
console.log('expected:        [["a","a","c","c"],["a","a","c","c"],["b","b","c","c"],["b","b","c","c"]]');

我不明白结果,我期待的是4x4数组。

init:            [["a","a"],["a","a"]]
added 2 columns: [["a","a"],["a","a"],["b","b"],["b","b"]]
added 2 rows:    [["a","a","c","c"],["a","a","c","c"],["b","b","c","c","c","c"],["b","b","c","c","c","c"]]
expected:        [["a","a","c","c"],["a","a","c","c"],["b","b","c","c"],["b","b","c","c"]]

0 个答案:

没有答案