如何对比字段不同的对象数组,新增isPresent字段标识公共元素
实现方案
核心思路
先把obj1中所有的name值提取为Set集合,利用Set的O(1)查询效率提升匹配速度,之后遍历obj2的每一项,判断当前项的email是否存在于上述Set中,给每一项新增isPresent字段赋值判断结果即可。
JavaScript 代码实现
const obj1 = [ {keyID: 'c71cc89335565241f59ac9bb9da162a3ddf4a6b483bdc06dd82b9275898ba5ee', name: 'user1@mail.com'}, {keyID: '34051d2554ab20b0d24c2c39946d96da7e07508e7a8546bc2df299601dcbff05', name: 'user2@mail.com'} ]; const obj2 = [ {id: 19, email: 'user4@mail.com', other_field: false}, {id: 221, email: 'user3@mail.com', other_field: false}, {id: 13, email: 'user2@mail.com', other_field: false}, {id: 2, email: 'user1@mail.com', other_field: true} ]; // 提取obj1的name生成集合,用于快速匹配 const nameSet = new Set(obj1.map(item => item.name)); // 遍历obj2生成目标结果 const result = obj2.map(item => { return { ...item, isPresent: nameSet.has(item.email) } });
补充说明
当前代码采用对象扩展运算符做浅拷贝,完全适配你给出的平层字段结构,不会修改原obj2的内容。如果obj2包含深层嵌套字段,把...item替换为对应深拷贝逻辑即可。
内容的提问来源于stack exchange,提问作者spring00
相关产品推荐
相关产品推荐

