首页 > 解决方案 > 在嵌套循环中将条目推送到数组中

问题描述

我的代码:

function zeroArray() {
  let newArray = [];
  let row = [];
  for (let i = 0; i < 3; i++) {
    for (let j = 0; j < 2; j++) {
      row.push(0);
    }
        newArray.push(row);
  }
  return newArray
}

console.log(zeroArray())

从我的角度来看,它看起来像结果将是:

[[ 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 ] ]

标签: javascript

解决方案


function zeroArray() {
  let newArray = [];
  let row = [];
  for (let i = 0; i < 3; i++) {
    for (let j = 0; j < 2; j++) {
      row.push(0);
    }
    newArray.push(row); // <== Problematic line
  }
  return newArray;
}

问题是当您将row数组推入时newArray,它实际上并没有将值推入其中;它将指针推送到该数组,这意味着在更新row数组后,如果再次推送它,它会将相同的值推送到newArray.

贴出插图进行详细说明:

在此处输入图像描述

正如其他人指出的那样,解决方案是每次都重新创建数组,而不是使用相同的变量。例如,解决方案可能是:

function zeroArray() {
  const newArray = [];
  for (let i = 0; i < 3; i++) {
    const row = [];
    for (let j = 0; j < 2; j++) {
      row.push(0);
    }
    newArray.push(row); // <== Problematic line
  }
  return newArray;
}

推荐阅读