如何从对象数组中移除重复元素并生成新数组
移除对象数组中的重复元素
针对你给出的包含重复对象的数组,我们可以通过几种实用的JavaScript方法实现去重,最终得到只包含唯一对象的新数组。
方法1:利用Set高效去重(推荐)
这种方法借助Set跟踪已出现的item值,结合filter过滤数组,时间复杂度为O(n),处理大数据组时效率更高:
let arr = [{item: 'abc'},{item: 'def'},{item: 'abc'},{item: 'ghi'}]; const seenItems = new Set(); const newArr = arr.filter(obj => { if (seenItems.has(obj.item)) { return false; } seenItems.add(obj.item); return true; }); console.log(newArr); // 输出: [{item: 'abc'},{item: 'def'},{item: 'ghi'}]
原理说明
seenItems作为集合存储已处理过的item值,天然保证唯一性- 遍历数组时,若当前对象的
item已在集合中则过滤掉,否则保留对象并将item加入集合
方法2:使用reduce构建去重数组
如果不想额外创建集合对象,可以用reduce累加生成去重后的数组,适合处理小型数组:
let arr = [{item: 'abc'},{item: 'def'},{item: 'abc'},{item: 'ghi'}]; const newArr = arr.reduce((uniqueArr, currentObj) => { // 检查累加器中是否已有相同item的对象 const isDuplicate = uniqueArr.some(obj => obj.item === currentObj.item); if (!isDuplicate) { uniqueArr.push(currentObj); } return uniqueArr; }, []); console.log(newArr);
原理说明
uniqueArr是累加器,初始值为空数组,用来存储去重后的结果- 每次遍历当前对象时,用
some检查累加器中是否存在相同item的对象,不存在则推入累加器
扩展:多字段去重(可选)
如果你的对象包含多个字段,需要基于多个字段判断重复,可以将字段拼接成唯一键来扩展逻辑:
// 示例:基于item和id字段去重 let arr = [{item: 'abc', id: 1},{item: 'def', id: 2},{item: 'abc', id: 1},{item: 'ghi', id: 3}]; const seenKeys = new Set(); const newArr = arr.filter(obj => { const uniqueKey = `${obj.item}-${obj.id}`; if (seenKeys.has(uniqueKey)) return false; seenKeys.add(uniqueKey); return true; });
内容的提问来源于stack exchange,提问作者Uddesh Tidke
相关产品推荐
相关产品推荐

