在另一个对象数组中搜索值列表,并使用single for循环更改对象数组中的一个键

时间:2018-10-24 07:35:06

标签: javascript

如果empIds可用,我想更改emps中的“ selected”键值。我使用两个for循环尝试了以下逻辑。我正在尝试使用for循环的逻辑,但是没有用。任何人都对Single for循环逻辑有所了解。请提供一些示例逻辑。

以下是数组值和对象数组的示例格式

// values in list are dynamic
empIds = [1,3];

// object values in array are dynamic
emps = [{
id: 1,
name:'test1',
selected: false
},
{
id: 2,
name:'test2',
selected: false
},
{
id: 3,
name:'test3',
selected: false
}];

// logic 
for (var i = 0; i< empIds.length; i++) {
  for (var j = 0; j< emps.length; j++) {
    if (empIds[i] === emps[j].id) {
       emps[j].selected = true;
     } else {
         emps[j].selected = false;
      }
   }
 }

2 个答案:

答案 0 :(得分:3)

简单的forEach并包含

alive-ios.analytics_160092165.events_2018*

答案 1 :(得分:0)

对于复杂度较低的解决方案,建议您先创建Map中的emps,并用id进行索引,然后再遍历{{1} },然后直接访问相应的对象empIds

O(N)

您也可以在const empIds = [1, 3]; const emps = [{ id: 1, name: 'test1', selected: false }, { id: 2, name: 'test2', selected: false }, { id: 3, name: 'test3', selected: false } ]; const empsById = emps.reduce((map, emp) => map.set(emp.id, emp), new Map()); empIds.forEach((id) => empsById.get(id).selected = true); console.log(emps);中嵌套.find以在数组中找到合适的对象,但这基本上等效于两个forEach循环,并且是for