簡體   English   中英

Javascript:如何在不更改引用的情況下修改數組中的每個元素

[英]Javascript: How to modify each element in array without changing the reference

let nestedArr = [[0,0],[0,0]]
let insideArr = nestedArr[0]
let targetArr = [1,1]

基本上我想將insideArr's元素更改為等於targetArr ,它也應該更改nestedArr的第一個元素(因為insideArr的是那個)。

insideArr = targetArr
insideArr = [..targetArr]

以上兩種方法都行不通,因為它會使insideArr指向新的引用。 我知道使用forEach循環遍歷insideArr並一個一個地分配它應該可以工作,但是有更好的方法嗎? 順便說一句,我應該避免這種用法嗎?

如果你必須維護insideArr作為對nestedArr[0]的引用,你可以使用Array.prototype.splice()來改變insideArr

 let nestedArr = [[0,0],[0,0]] let insideArr = nestedArr[0] let targetArr = [1,1] // Replace all of insideArr with targetArr insideArr.splice(0, insideArr.length, ...targetArr) console.log("still the same reference?", insideArr === nestedArr[0]) console.log("insideArr:", insideArr) console.log("nestedArr:", nestedArr)
 .as-console-wrapper { max-height: 100%;important; }

假設您有充分的理由保持參考相同 - 有時有,您可以這樣做:

let nestedArr = [
  [0, 0],
  [0, 0]
];
let insideArr = nestedArr[0];
let targetArr = [1, 1];
insideArr.length = 0;
insideArr.unshift(...targetArr); // insideArr.push(...targetArr) works fine too
console.log(nestedArr);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM