簡體   English   中英

在引用變量中更改時原始數組未更新

[英]Original array not getting updated when changed in referenced variable

對於我的工作,我需要訪問嵌套的 object 數組。 我不想每次都使用完整路徑訪問它。 所以我想通過將實際引用分配給變量來縮短引用。

我試圖找出現有的答案,但沒有得到這種情況的答案。

我所做的:將數組的引用分配給變量,修改引用的值。 但是原始數組沒有被修改。

下面是我想要實現的演示代碼。

 let obj = { innerObj1: { arr: [2,3,4,5,6] } } var ref = obj.innerObj1.arr; console.log(ref); // output [2,3,4,5,6] ref = ref.filter(n => n%2 == 0); console.log(ref); // output [2,4,6] //Original obj console.log(obj.innerObj1.arr) // output [2,3,4,5,6]

只需訪問ref中的特定索引:

let obj = {
    innerObj1: {
        arr: [2, 3, 4, 5, 6]
    }
}

const ref = obj.innerObj1.arr;
console.log(ref);
// output [2, 3, 4, 5, 6]

for(let i = 0; i < ref.length; i++) {
  ref[i] = ref[i] % 2 == 0;
}

// Original obj
console.log(obj.innerObj1.arr)
// output [true, false, true, false, true]

當我們這樣做時

var ref = obj.innerObj1.arr;

當我們執行ref.filter(n => n%2 == 0);時,我們有一個指向obj.innerObj1.arr的指針是對數組的ref

為了得到我們想要的,我們必須做

obj.innerObj1.arr = ref.filter(n => n%2 == 0);

這是因為filter方法返回一個新數組,而您正在用新值覆蓋它。

如前所述,它創建了一個新數組,這意味着ref變量不再引用舊數組。 它指的是通過filter方法創建的新數組。

您可以簡單地使用 for、while 或 do while 循環來解決此問題。

我希望它會幫助你。 請在此處找到工作示例:

 let obj = { innerObj1: { arr: [2,3,4,5,6] } } var ref = obj.innerObj1.arr; console.log(ref); // output [2,3,4,5,6] for(let index=0; index < ref.length; index++) { if(ref[index] % 2 === 0) { ref[index] = ref[index] } else{ ref.splice(index,1); } } console.log(ref); // output [2,4,6] //Original obj console.log(obj.innerObj1.arr) // output [2,3,4,5,6]

暫無
暫無

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

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