JavaScript实现对象数组按属性去重 同属性值对象仅保留一次
JS数组按指定属性去重简洁实现
需求说明
给定对象数组,要求按code属性去重,相同code值的对象仅保留第一次出现的条目,最终返回去重后的新数组。
原始数组:
[ {name: "Joske", code: "IEDDK"}, {name: "Mieke", code: "IEDDK"}, {name: "Jan", code: "IEDDK"}, {name: "Test", code: "IsxJK"}, {name: "Koen", code: "IsxJK"}, ]
期望输出:
[ {name: "Joske", code: "IEDDK"}, {name: "Test", code: "IsxJK"}, ]
实现代码
用Set做已出现值的存储,配合数组原生filter方法实现,逻辑直白无冗余:
const uniqueByCode = (arr) => { const seen = new Set(); return arr.filter(item => { if (seen.has(item.code)) return false; seen.add(item.code); return true; }); };
方案特点
- 时间复杂度O(n),仅需一次遍历即可完成去重,性能优异
- 逻辑可读性强:
Set专门负责记录已经出现过的code值,filter只做元素筛选,职责拆分清晰 - 不会修改原始数组,无副作用
- 扩展性好,如果后续需要更换去重依据的属性,仅需修改读取的属性名即可,比如要按
name去重就把item.code换成item.name
内容的提问来源于stack exchange,提问作者stijn.aerts
相关产品推荐
相关产品推荐

