如何更新多维数组中的元素

时间:2017-06-19 19:15:30

标签: javascript arrays

假设我有以下数组结构:

let cells = [
  ['foo', 'foo'],
  ['foo', 'foo']
]

我想更新它,所以它变成了:

[
  ['bar', 'foo'],
  ['foo', 'foo']
]

我认为这就足够了:

cells[0][0] = 'bar';

但是,这也改变了cells[1][0],反而导致:

[
  ['bar', 'foo'],
  ['bar', 'foo']
]

我如何只更改cells[0][0]

1 个答案:

答案 0 :(得分:2)

听起来像你的程序,你有一个数组,其中有两个属性引用同一个对象。这将在以下代码中发生:

let row = ["foo", "foo"]
let cells = [];
cells.push(row);
cells.push(row);

执行cells.push(row)时,您不会创建一个新数组,该数组将被推送到cells,而是通过引用传递数组。

现在只有一个数组row = ["foo", "foo"],由cells对象引用两次。通过执行cells[0][0] = "bar",我将更改row对象的第一个元素。由于同一对象在cells对象内部被引用两次,因此在两个位置上都是相同的。

根据您的使用情况,您要么克隆第一个数组,要么在第一个数组上独立创建一个新数组。

有关克隆数组的选项,请查看this question