如何过滤数组中category与sub_category相同的重复对象?
过滤数组中category和sub_category均重复的对象
下面提供几种JavaScript实现方案,按需选择:
方案一:利用Set结合字符串标识
通过将每个对象的category和sub_category拼接成唯一字符串,用Set记录已出现过的标识,遍历数组时只保留未重复的对象:
const originalArray = [ { category: 'ELECTRONICS', sub_category: 'CONSOLE' }, { category: 'ELECTRONICS', sub_category: 'CONSOLE' }, { category: 'ELECTRONICS', sub_category: 'TV' } ]; const seen = new Set(); const uniqueArray = originalArray.filter(item => { const key = `${item.category}-${item.sub_category}`; if (!seen.has(key)) { seen.add(key); return true; } return false; }); console.log(uniqueArray); // 输出:[{ category: 'ELECTRONICS', sub_category: 'CONSOLE' }, { category: 'ELECTRONICS', sub_category: 'TV' }]
方案二:使用reduce方法构建唯一映射
用reduce创建一个以拼接字符串为键的对象,自动覆盖重复项,最后提取对象的值得到去重数组:
const originalArray = [ { category: 'ELECTRONICS', sub_category: 'CONSOLE' }, { category: 'ELECTRONICS', sub_category: 'CONSOLE' }, { category: 'ELECTRONICS', sub_category: 'TV' } ]; const uniqueArray = Object.values( originalArray.reduce((acc, item) => { const key = `${item.category}-${item.sub_category}`; acc[key] = item; // 重复项会被最后一个出现的覆盖 return acc; }, {}) ); console.log(uniqueArray); // 输出结果同上
说明
- 两种方案核心都是通过唯一标识字符串判断重复,若后续需要增加判断字段,只需修改拼接的key即可
- 如果需要保留第一个出现的重复项,两种方案都适用;若要保留最后一个,方案二更直接
内容的提问来源于stack exchange,提问作者reacter777
相关产品推荐
相关产品推荐

