JS判断对象是否存在于对象数组及去重方案
本文探讨在JavaScript中判断对象是否存在于对象数组的两种常见场景:添加前校验与数组去重。第一种场景利用JSON.stringify序列化结合ES6的includes方法实现存在性检查;第二种场景介绍使用lodash库的uniqWith方法配合isEqual函数进行深层比较,从而高效完成对象数组的去重处理。
场景:
存在一个对象数组,例如:
var arr = [{"appName":"小何","appId":"1"},{"appName":"小王","appId":"2"}]通常涉及两种常见情况:
第一种情况,例如点击按钮向数组中 push()添加对象时,若数组内已存在该对象,则需提示禁止添加。
第二种情况,在 push()操作后进行去重处理,即实现对象数组的去重。
第一种场景的解决方案:若数组中已存在对象,则禁止添加
利用 includes() 方法,其含义为判断是否存在,存在时返回 true,不存在时返回 false。关键点在于需结合 JSON.stringify() 将对象序列化为字符串后再进行判断,示例代码如下:
var arr = [{"appName":"小何","appId":"1"},{"appName":"小王","appId":"2"}]
var obj = {"appName":"小王","appId":"2"}
//如果数组arr中不存在字符串JSON.stringify(obj),那就可以添加,反之,则不添加
if(JSON.stringify(arr).includes(JSON.stringify(obj)) === false){
console.log('不存在')
arr.push(obj)
}else{
console.log('已存在')
}总结:
ES6 新增的 includes() 方法功能强大,适用于字符串、数组及对象,返回布尔值。相较于常用的 indexof(),includes()具有更强的语义化,且性能表现良好!
第二种场景的解决方案:对象数组去重
我对对象数组去重的理解如下:
即对象的属性与值必须完全一致,且对象长度也必须相同。
这意味着 key 和 value 必须完全一致,且数量不能多也不能少。
尝试手写实现时嵌套了多层循环,导致性能不佳。现提供一步到位的最优解,代码如下:
lodash 是前端常用的 JS 方法库,它将多种方法封装起来以方便使用。
使用 lodash 的
_.uniqWith()方法,结合_.isEqual比较函数,即可较为完美的解决问题。
需要注意的是,_.isEqual()方法也是非常强大的,作用是比较两个对象是否相等,这个方法非常实用,我经常用它,他是深层递归的,推荐。

代码示例:
var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];
_.uniqWith(objects, _.isEqual);
// => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]至此,关于判断对象是否存在于对象数组中的文章介绍完毕。如需了解更多 js 判断对象在对象数组中的相关内容,请搜索本站历史文章或继续浏览下方相关文章,希望大家日后多多支持本站!
D3.js 比例尺与坐标轴的配置详解
2026-11-05 16:54:46
JavaScript怎么遍历对象的Symbol键和不可枚举属性
2026-11-05 13:13:39
封装一个健壮的JS字符串判空工具函数
2026-11-05 12:16:14
JavaScript合并数组的三种常用方法:concat、扩展运算符与push
2026-11-05 11:22:29
JavaScript立即执行函数(IIFE)是什么及基本语法
2026-11-05 10:51:19
