如何从给定对象数组中获取去重后的唯一对象数组?
JavaScript 对象数组去重方法
给定如下包含重复对象的数组:
let array = [{"name": "A","age": 12},{"name": "A","age": 12},{"name": "B","age": 35},{"name": "C","age": 32}];
要得到去重后的唯一对象数组,可使用以下几种实用方法:
方法1:Set + JSON 序列化/反序列化
由于对象是引用类型,直接存入Set无法识别内容相同的重复对象,因此先将对象转为字符串去重,再转回对象:
const uniqueArray = Array.from(new Set(array.map(item => JSON.stringify(item)))).map(str => JSON.parse(str)); console.log(uniqueArray); // 输出:[{"name": "A","age": 12},{"name": "B","age": 35},{"name": "C","age": 32}]
- 优点:代码简洁,快速实现
- 注意:若对象键顺序不同(比如
{"age":12,"name":"A"}与{"name":"A","age":12})会被判定为不同对象;同时无法处理函数、undefined等JSON不支持的类型。
方法2:reduce + 缓存对象(自定义去重规则)
如果需要灵活指定去重判断逻辑(比如用特定字段组合作为唯一标识),可以用reduce结合缓存对象实现,性能更优:
const uniqueArray = array.reduce((acc, current) => { // 用name和age拼接成唯一标识键 const key = `${current.name}-${current.age}`; if (!acc.cache[key]) { acc.cache[key] = true; acc.result.push(current); } return acc; }, { cache: {}, result: [] }).result; console.log(uniqueArray);
- 优点:自定义规则灵活,缓存对象查找为O(1)时间复杂度,处理大数据组效率更高
- 适用场景:复杂对象、需要指定特定字段判断重复的场景
方法3:filter + Map
用filter筛选元素,同时用Map记录已出现过的对象标识:
const map = new Map(); const uniqueArray = array.filter(item => { const key = `${item.name}-${item.age}`; if (!map.has(key)) { map.set(key, item); return true; } return false; }); console.log(uniqueArray);
- 优点:逻辑清晰,支持自定义去重规则,
Map的键可以是任意类型(若需用对象本身作为键,需注意引用问题)
内容的提问来源于stack exchange,提问作者mptl
相关产品推荐
相关产品推荐

