如何在JavaScript中根据Group和Name对数组对象去重
去除数组中Group和Name均重复的对象
原代码仅提取了Group字段的唯一值,无法实现同时去除Group和Name都重复的对象的需求(例:索引0与索引2的对象Group为'A'、Name为'SD',属于重复项,需仅保留一个)。
原代码
const data = [{ id: 1, Group: 'A', Name: 'SD' }, { id: 2, Group: 'B', Name: 'FI' }, { id: 3, Group: 'A', Name: 'SD' }, { id: 4, Group: 'B', Name: 'CO' }]; let unique = [...new Set(data.map(item => item.Group))]; console.log(unique);
解决方案
方法1:使用Set过滤首次出现的对象
通过拼接Group和Name生成唯一标识键,用Set记录已出现的键,过滤数组时仅保留首次出现的对象:
const data = [{ id: 1, Group: 'A', Name: 'SD' }, { id: 2, Group: 'B', Name: 'FI' }, { id: 3, Group: 'A', Name: 'SD' }, { id: 4, Group: 'B', Name: 'CO' }]; const seen = new Set(); const uniqueItems = data.filter(item => { const key = `${item.Group}-${item.Name}`; if (seen.has(key)) return false; seen.add(key); return true; }); console.log(uniqueItems); // 输出结果:[{id:1, Group:'A', Name:'SD'}, {id:2, Group:'B', Name:'FI'}, {id:4, Group:'B', Name:'CO'}]
方法2:使用Map存储唯一对象
利用reduce遍历数组,用Map存储每个复合键对应的对象,确保每个键仅对应一个对象,最后转换为数组:
const data = [{ id: 1, Group: 'A', Name: 'SD' }, { id: 2, Group: 'B', Name: 'FI' }, { id: 3, Group: 'A', Name: 'SD' }, { id: 4, Group: 'B', Name: 'CO' }]; const uniqueItems = Array.from( data.reduce((map, item) => { const key = `${item.Group}-${item.Name}`; // 若需保留最后出现的重复对象,直接执行 map.set(key, item) 即可 if (!map.has(key)) map.set(key, item); return map; }, new Map()).values() ); console.log(uniqueItems);
内容的提问来源于stack exchange,提问作者simon
相关产品推荐
相关产品推荐

