在不更改原始数组的情况下,通过更新数组元素创建新数组



这是数组,我想替换元素"A";以及";B";用";D";。我不想改变原来的数组,所以我使用了扩散运算符。但无论何时更新newArr,我的原始数组都会发生变化。我希望originalArray应该是[["A", 2],["B",1]],newArr应该是[["D", 2],["D",1]]有人能给我推荐这个的解决方案吗

let originalArray = [["A", 2],["B",1]];
let newArr = [ ...originalArray  ];
for(let i=0;i<newArr.length;i++){
newArr[i][0] = "D";
}
console.log(originalArray )
console.log(newArr)

传播并不意味着深度复制。你有一个二维数组,所以当你展开顶层时,嵌套的数组仍然引用原始数组:

let originalArray = [["A", 2], ["B",1]];
let newArr = [...originalArray];
console.log(originalArray[0] === newArr[0]) // true

最简单的必要改变是也扩展嵌套阵列

let originalArray = [["A", 2], ["B",1]];
let newArr = [...originalArray];
for(let i = 0; i < newArr.length; i++) {
newArr[i] = ["D", ...newArr[i].slice(1)]; // make a copy here as well using slice and omitting the first element
}
console.log(originalArray )
console.log(newArr)

最新更新