当我console.log结果时,我得到原始数组已更改。我找不到为什么?我做了 slice().reverse() 来保存原始文件,但它不起作用。如果我编辑此代码,使其一维数组运行良好,并且原始数组不变。
let original = [["one", 1], ["two", 2], ["three", 3], ["four", 4], ["five", 5]];
let kopija = original.slice().reverse();
for (let i=0; i<5; i++){
while(kopija[i][1] > 1){
kopija[i][1]--
}
}
console.log("kopija" + kopija)
console.log("original" + original)
因为 slice() 创建了数组的浅表副本,这意味着它创建了一个新数组,但仍然引用相同的嵌套数组。因此,当您修改 kopijai-- 中的嵌套数组时,您也会修改原始中相应的嵌套数组,因为它们指向内存中的相同对象。
要解决您的问题,您可以使用诸如 map() 之类的方法为每个内部数组创建新数组。像这样的东西:
let original = [["one", 1], ["two", 2], ["three", 3], ["four", 4], ["five", 5]];
// Create a deep copy using map() to clone inner arrays
let kopija = original.map(arr => [...arr]).reverse();
for (let i = 0; i < 5; i++) {
while (kopija[i][1] > 1) {
kopija[i][1]--;
}
}
console.log("kopija: ", kopija);
console.log("original: ", original);
通过这样做,原始数组将保持不变,因为“kopija”包含嵌套数组的深层副本,而不仅仅是对它们的引用。