使用切片的数组复制不起作用

TSR*_*TSR 2 javascript arrays

我希望在使用后distances.slice(),我会得到该数组的副本。但是当我更改新副本的元素时,它仍然会更改原始数组。为什么?

var distances = [
  ['-1', '10', '-1', '31'],
  ['10', '-1', '10', '-1'],
  ['-1', '-1', '-1', '10'],
  ['15', '6', '-1', '-1']
];
for (var i = 0; i < 4; i++) {
  console.log(distances, 'distances pairstop');
  var sampleDistance = distances.slice()
  sampleDistance[0][2] = ['fooo']
}
Run Code Online (Sandbox Code Playgroud)

Yos*_*ein 5

Slice 生成数组的浅表副本。文档中是这样说的:

slice() 方法将数组的一部分的浅拷贝返回到从开始到结束(不包括结束)选择的新数组对象中。原始数组不会被修改。

由于distances是 arryas 数组,sampleDistance因此将是浅拷贝,这意味着它将保存对相同 3(一维)数组的引用。 sampleDistance[0][2] = ['fooo']更改第一个一维数组,该数组由sampleDistance和引用distances

因此你的错误。