首页 > 解决方案 > 如果对象 id 在另一个对象数组中,如何设置布尔属性值?

问题描述

我有两个数组selectedDataallServices

selectedData = [
 { id: 5 },
 { id: 6 }
];

allServices = [
 { id: 3, selected: false },
 { id: 4, selected: false },
 { id: 5, selected: false },
 { id: 6, selected: false },
 { id: 7, selected: false },
];

我使用该功能来比较和更改allServices结构。

const changeStructure = (selectedData, allServices) => {
  selectedData.services.map((_item, index) => {
    allServices.map((value, i) => {
      if (value.id === _item.id) {  
        allServices[i].selected = true;
      } else {
        allServices[i].selected = false;
      }
    }) 
  })
  console.log('final allServices', allServices);
  return allServices;
}

console.logfinal allServices

[
  { id: 3, selected: false },
  { id: 4, selected: false },
  { id: 5, selected: false },
  { id: 6, selected: true },
  { id: 7, selected: false },
];

我以为我的allServices应该是

[
  { id: 3, selected: false },
  { id: 4, selected: false },
  { id: 5, selected: true },
  { id: 6, selected: true },
  { id: 7, selected: false },
];

我不知道为什么会这样。任何建议将不胜感激。

标签: javascript

解决方案


您需要else从代码中删除该块,这会将先前的 ID 更新为不匹配时的 false。

const changeStructure = (selectedData, allServices) => {
  selectedData.services.map((_item, index) => {
    allServices.map((value, i) => {
      if (value.id === _item.id) {  
        allServices[i].selected = true;
      }
    }) 
  })
  console.log('final allServices', allServices);
  return allServices;
}

推荐阅读