如何基于两个数组为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
相关产品推荐
相关产品推荐

