假设我有以下数组结构:
let cells = [
['foo', 'foo'],
['foo', 'foo']
]
我想更新它,所以它变成了:
[
['bar', 'foo'],
['foo', 'foo']
]
我认为这就足够了:
cells[0][0] = 'bar';
但是,这也改变了cells[1][0]
,反而导致:
[
['bar', 'foo'],
['bar', 'foo']
]
我如何只更改cells[0][0]
?
答案 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。