如何在JavaScript中移除数组中的所有唯一对象?
保留数组中重复对象的实现方案
要实现只保留数组中重复出现的对象实例(剔除仅出现一次的对象),可以按以下步骤操作:
核心思路
JavaScript里对象是引用类型,直接比较只会判断引用是否相同,而非内容是否一致。所以我们需要先把对象转换成能唯一标识其内容的字符串,统计每个内容的出现次数,再过滤出出现次数≥2的所有对象实例。
实现代码
var myArray = [ { name: 'tom', country: 'america', favoriteFood: 'pizza' }, { name: 'gary', country: 'france', favoriteFood: 'pasta' }, { name: 'tom', country: 'america', favoriteFood: 'pizza' }, { name: 'lou', country: 'brazil', favoriteFood: 'fries' }, { name: 'gary', country: 'france', favoriteFood: 'pasta' }, { name: 'marge', country: 'russia', favoriteFood: 'steak' } ]; // 统计每个对象内容的出现次数 const countMap = {}; myArray.forEach(obj => { // 将对象转为字符串,内容一致的对象会生成相同字符串 const key = JSON.stringify(obj); countMap[key] = (countMap[key] || 0) + 1; }); // 过滤出所有出现次数≥2的对象 const result = myArray.filter(obj => { const key = JSON.stringify(obj); return countMap[key] >= 2; }); console.log(result);
补充说明
JSON.stringify(obj)会把对象内容转换成字符串,确保内容完全相同的对象得到同一个键,以此准确统计出现次数。- 这个方案适用于对象仅包含基本类型(字符串、数字、布尔值等)的场景。如果对象包含函数、
undefined或循环引用,需要自定义生成唯一键的逻辑(比如遍历对象的所有键值对拼接成字符串)。
内容的提问来源于stack exchange,提问作者Robby Hoover
相关产品推荐
相关产品推荐

