You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于两个数组为Employees对象添加isSelected属性生成新数组

问题描述

现有如下两个示例数组:

Employees = [
  { id: 1, name: 'Ahmed', age: 22 },
  { id: 2, name: 'hassan', age: 43 },
  { id: 3, name: 'john', age: 44 },
  { id: 4, name: 'salem', age: 66 }
]

b = [{ emp_id: 1, name: 'Ahmed' }, { emp_id: 4, name: 'salem' }]

需要生成一个与Employees结构一致的新数组,为每个对象新增isSelected属性:若数组b中的emp_id与Employees数组中对象的id匹配,则isSelected值为true,否则为false。示例结果如下:

MyNewList = [
  { id: 1, name: 'Ahmed', age: 22, isSelected: true },
  { id: 2, name: 'hassan', age: 43, isSelected: false },
  { id: 3, name: 'john', age: 44, isSelected: false },
  { id: 4, name: 'salem', age: 66, isSelected: true }
]
解决方案

可以通过以下步骤高效实现需求:

  • 先提取数组b中所有选中的员工ID,存入Set集合(利用Set的O(1)查找特性提升效率)
  • 遍历Employees数组,为每个对象扩展isSelected属性,判断当前员工ID是否在选中集合中

具体代码实现:

// 提取选中的员工ID集合
const selectedEmpIds = new Set(b.map(item => item.emp_id));

// 生成目标数组
const MyNewList = Employees.map(employee => ({
  ...employee,
  isSelected: selectedEmpIds.has(employee.id)
}));

说明

  • 使用Set存储选中ID,避免每次判断都遍历b数组,数据量越大,性能优势越明显
  • 通过对象展开运算符...保留原对象的所有属性,同时新增isSelected属性,不会修改原Employees数组,保证数据不可变性

内容的提问来源于stack exchange,提问作者Nagween Jaffer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 12:05:19