如何合并对象数组中重复date的name字段并删除重复对象?
合并数组中日期重复对象的名称字段
需求:检查对象数组中是否存在date字段重复的对象,若存在则将这些重复对象的name字段用“/”拼接,并移除重复对象。
现有实现代码:
var arr = [ {name: "Adam", date: "25/11/2022" }, {name: "Jorge", date: "25/11/2022" }, {name: "Lucas", date: "24/11/2022" }, {name: "Bob", date: "23/11/2022" } ] function getUniqueListBy(arr, key) { return [...new Map(arr.map(item => [item[key], item])).values()] } const arr1 = getUniqueListBy(arr, 'date') console.log(JSON.stringify(arr1))
现有代码的问题是使用Map去重时会直接覆盖重复date的对象,无法实现name字段的合并。
解决方案思路
- 遍历数组,用一个对象按
date字段分组,存储每个日期对应的名称列表 - 遍历分组后的结果,将同一日期下的所有名称用“/”拼接,生成包含合并后名称和日期的新对象
- 将所有新对象收集成最终的数组
完整实现代码
var arr = [ {name: "Adam", date: "25/11/2022" }, {name: "Jorge", date: "25/11/2022" }, {name: "Lucas", date: "24/11/2022" }, {name: "Bob", date: "23/11/2022" } ] function mergeDuplicateDates(arr) { const dateMap = {}; // 按date分组收集名称 arr.forEach(item => { if (!dateMap[item.date]) { dateMap[item.date] = []; } dateMap[item.date].push(item.name); }); // 转换为目标格式的数组 return Object.entries(dateMap).map(([date, names]) => ({ name: names.join(' / '), date: date })); } const arr1 = mergeDuplicateDates(arr); console.log(JSON.stringify(arr1));
输出结果
[{"name":"Adam / Jorge","date":"25/11/2022"},{"name":"Lucas","date":"24/11/2022"},{"name":"Bob","date":"23/11/2022"}]
内容的提问来源于stack exchange,提问作者NewProgrammer
相关产品推荐
相关产品推荐

