如何使用JavaScript去除两个数组合并后empId相同的重复记录
问题根因
你现有代码无法去重的核心原因是:Set 是基于值相等做去重,而数组中的员工数据是对象(引用类型),即使两个对象的所有属性值完全相同,只要是不同的引用地址,Set 就会判定为两个不同的元素,无法按empid字段的规则去重。
解决代码
可以用Map结构来实现按指定字段去重,将empid作为Map的唯一键,最终提取Map的所有值即可得到去重后的数组:
var array1 = [{"empid":"10043","empsalary":"10000","empaddress":"test1"}, {"empid":"10044","empsalary":"20000","empaddress":"test2"}, {"empid":"10045","empsalary":"30000","empaddress":"test3"}, {"empid":"10046","empsalary":"40000","empaddress":"test4"}, {"empid":"10047","empsalary":"50000","empaddress":"test5"}, ] var array2 = [{"empid":"10043","empsalary":"10000","empaddress":"test1"}, {"empid":"10044","empsalary":"20000","empaddress":"test2"}, {"empid":"10048","empsalary":"30000","empaddress":"test3"}, {"empid":"10049","empsalary":"40000","empaddress":"test4"}, {"empid":"10041","empsalary":"50000","empaddress":"test5"}, ] // 合并两个数组后存入Map,empid作为唯一键,重复empid的元素会被后出现的覆盖 const tempMap = new Map() ;[...array1, ...array2].forEach(item => { tempMap.set(item.empid, item) }) // 提取Map的所有值得到最终结果 const array3 = Array.from(tempMap.values()) console.log(JSON.stringify(array3, null, 2))
运行上述代码输出结果和你期望的效果完全一致。
内容的提问来源于stack exchange,提问作者Rajasekhar
相关产品推荐
相关产品推荐

