【发布时间】:2018-02-18 22:00:18
【问题描述】:
我有两个对象,一个是一个如下所示的数组:
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}
]
为什么会这样?
【问题讨论】:
-
注意:我只是直接在命令行中尝试了这个,然后得到 Property 'on' does not exist on type... 错误。这可以通过将 on 值全部设置为 false 来初始化对象来解决,但它仍然具有相同的结果。
-
作为旁注,我建议使用
for-of循环来迭代数组中的值,或者使用forEach方法。
标签: javascript loops typescript logic