如何移除JavaScript对象数组中的重复category?
移除对象数组中重复category的实现方法
针对你提供的costItems数组,要移除重复category对应的对象、只保留一个,这里有几种实用的实现方式:
方法一:使用Array.filter() + Set
这种方法会保留第一次出现的category对象,利用Set的唯一性跟踪已处理过的分类:
const seenCategories = new Set(); const uniqueCostItems = costItems.filter(item => { if (seenCategories.has(item.category)) return false; seenCategories.add(item.category); return true; });
方法二:使用Array.reduce()
这种方法可灵活控制保留重复项中的第一个或最后一个:
- 保留最后出现的对象(后续重复项覆盖之前的):
const uniqueCostItems = Object.values( costItems.reduce((acc, item) => { acc[item.category] = item; return acc; }, {}) );
- 保留第一次出现的对象:
const uniqueCostItems = Object.values( costItems.reduce((acc, item) => { if (!acc[item.category]) { acc[item.category] = item; } return acc; }, {}) );
方法三:使用Map
Map的键具有唯一性,同样支持选择保留第一个或最后一个对象:
const categoryMap = new Map(); costItems.forEach(item => { // 保留第一个:仅当Map中无该category时添加 if (!categoryMap.has(item.category)) { categoryMap.set(item.category, item); } // 保留最后一个:直接覆盖即可,注释掉上面判断,用这行:categoryMap.set(item.category, item); }); const uniqueCostItems = Array.from(categoryMap.values());
以上几种方法都能实现需求,你可以根据场景选择合适的方式。
内容的提问来源于stack exchange,提问作者Somasekhar
相关产品推荐
相关产品推荐

