簡體   English   中英

為什么只有我的最后一個對象在對象中循環更新

[英]Why is only my last object being updated in loop in object

我有兩個對象,一個是一個看起來像這樣的數組:

let value = [123,500];

另一個是一個看起來像這樣的對象數組:

let mapObject = [
  {id:123,name:"Thing 1"},
  {id:444,name:"Thing 2"},
  {id:500,name:"Thing 3"},
  {id:777,name:"Thing 4"}
];

next 函數的目標是迭代 mapObject,如果 id 與值中的任何元素匹配,則將名為“on”的新屬性設置為 true,否則將其設置為 false。 這是代碼:

for (let i in mapObject) {
  for (let j in value) {
    if (mapObject[i].id == value[j]) {
      mapObject[i].on = true;
    } else {
      mapObject[i].on = false;
    }
  }
}

我期望的是:

[
  {id:123,name:"Thing 1",on:true},
  {id:444,name:"Thing 2",on:false},
  {id:500,name:"Thing 3",on:true},
  {id:777,name:"Thing 4",on:false}
]

然而,我實際上得到的是這樣的:

[
  {id:123,name:"Thing 1",on:false},
  {id:444,name:"Thing 2",on:false},
  {id:500,name:"Thing 3",on:true},
  {id:777,name:"Thing 4",on:false}
]

為什么會發生這種情況?

你的循環邏輯不好。 將值更新為 true 后,您應該中斷內部循環。

for (let i in mapObject) {
    for (let j in value) {
        if (mapObject[i].id == value[j]) {
            mapObject[i].on = true;
            break;
        } else {
            mapObject[i].on = false;
        }
    }
}

問題是,一旦您將值更新為true您將再次使用相同的mapObject[i].id循環,並針對value[j]中的新值對其進行測試。

暫無
暫無

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

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