为什么只有我的最后一个对象在对象中循环更新

时间:2018-02-18 22:00:19

标签: javascript loops typescript logic

我有两个对象,一个是这样的数组:

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"}
];

下一个函数的目标是迭代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}
]

为什么会这样?

1 个答案:

答案 0 :(得分:1)

你的循环逻辑不好。一旦将值更新为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]的新值进行测试。