[英]Data not getting updated in array of objects when the value in scope variable changes
[英]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.