如何从对象数组中移除所有重复对象,仅保留唯一出现的项?
保留JavaScript数组中仅出现一次的对象
原数组
[ { "code": "d1", "title": "Title 1" }, { "code": "d2", "title": "Title 2" }, { "code": "d3", "title": "Title 3" }, { "code": "d4", "title": "Title 4" }, { "code": "d4", "title": "Title 4" }, { "code": "d3", "title": "Title 3" } ]
需求说明
仅保留数组中仅出现一次的对象,排除所有存在重复的对象(无论重复次数多少),最终输出仅包含d1和d2的数组。
解决方案
方法1:基于唯一标识(如code)统计过滤
如果可以确定code是对象的唯一标识(同code则对象完全相同),可以用以下代码:
const originalArray = [ { "code": "d1", "title": "Title 1" }, { "code": "d2", "title": "Title 2" }, { "code": "d3", "title": "Title 3" }, { "code": "d4", "title": "Title 4" }, { "code": "d4", "title": "Title 4" }, { "code": "d3", "title": "Title 3" } ]; // 统计每个code的出现次数 const codeCount = originalArray.reduce((counts, item) => { counts[item.code] = (counts[item.code] ?? 0) + 1; return counts; }, {}); // 过滤出仅出现一次的对象 const result = originalArray.filter(item => codeCount[item.code] === 1); console.log(result);
方法2:基于完整对象匹配统计过滤
如果需要严格匹配对象的所有属性(防止code相同但其他属性不同的情况),可以将对象序列化为字符串作为统计键:
const originalArray = [ { "code": "d1", "title": "Title 1" }, { "code": "d2", "title": "Title 2" }, { "code": "d3", "title": "Title 3" }, { "code": "d4", "title": "Title 4" }, { "code": "d4", "title": "Title 4" }, { "code": "d3", "title": "Title 3" } ]; // 统计每个完整对象的出现次数 const itemCount = originalArray.reduce((counts, item) => { const key = JSON.stringify(item); counts[key] = (counts[key] ?? 0) + 1; return counts; }, {}); // 过滤出仅出现一次的对象 const result = originalArray.filter(item => itemCount[JSON.stringify(item)] === 1); console.log(result);
输出结果
两种方法最终都会得到:
[ { "code": "d1", "title": "Title 1" }, { "code": "d2", "title": "Title 2" } ]
内容的提问来源于stack exchange,提问作者Kabir Ul Althamash
相关产品推荐
相关产品推荐

