Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么只有我的最后一个对象在对象中的循环中更新_Javascript_Loops_Typescript_Logic - Fatal编程技术网

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

Javascript 为什么只有我的最后一个对象在对象中的循环中更新,javascript,loops,typescript,logic,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"} ]; 另一个是如下所示的对象数组: let value = [123,500]; let mapObject = [ {id:123,name:"Thing

我有两个对象,一个是如下所示的数组:

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"}
];
另一个是如下所示的对象数组:

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

为什么会发生这种情况?

您的循环逻辑不好。一旦将该值更新为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]

中的新值对其进行测试。注意:我只是在命令行中直接尝试了此操作,得到的属性“on”在类型上不存在。。。错误这可以通过将on值全部设置为false来初始化对象来解决,但结果仍然相同。作为旁注,我建议使用
for of
循环来迭代数组中的值,或者使用
forEach
方法。我会将
映射对象[I].on=false
在的
之前,为了确保字段有一个值,就好像该值是在
上移动的第一个值一样,将保持未定义状态。对此,我认为我对typescript有一些基本的误解。原来我只是个笨蛋。谢谢。别担心,伙计,这些事情都会发生的。