js判断一个对象是否在一个对象数组中

简介: js判断一个对象是否在一个对象数组中

场景:


有一个对象数组,如:

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()方法也是非常强大的,作用是比较两个对象是否相等,这个方法非常实用,我经常用它,他是深层递归的,推荐。

f3b1334272d14401bc9eb1b55fe29ba7.png

代码示例:

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 }]


相关文章
|
23小时前
|
JavaScript 前端开发 算法
虚拟DOM是React的关键技术,它是个轻量的JS对象树,模拟实际DOM结构。
【6月更文挑战第27天】虚拟DOM是React的关键技术,它是个轻量的JS对象树,模拟实际DOM结构。当状态改变,React不直接修改DOM,而是先构建新的虚拟DOM树。通过 diff 算法比较新旧树,找到最小变更,仅更新必要部分,提高性能,避免频繁DOM操作。虚拟DOM还支持跨平台应用,如React Native。它优化了更新流程,简化开发,并提升了用户体验。
8 1
|
1天前
|
JavaScript 前端开发
技术经验分享:javaScript遍历对象、数组总结
技术经验分享:javaScript遍历对象、数组总结
技术经验分享:javaScript遍历对象、数组总结
|
2天前
|
JavaScript 索引
JS判断数组是否包含某个元素
JS判断数组是否包含某个元素
7 1
|
2天前
|
前端开发 JavaScript 安全
解锁 JavaScript ES6:函数与对象的高级扩展功能
解锁 JavaScript ES6:函数与对象的高级扩展功能
|
2天前
|
JavaScript 前端开发 Java
遨游 JavaScript 对象星际:探索面向对象编程的深邃世界
遨游 JavaScript 对象星际:探索面向对象编程的深邃世界
|
2天前
|
前端开发 JavaScript 算法
JavaScript 中的数学与时光魔法:Math与Date对象大揭秘
JavaScript 中的数学与时光魔法:Math与Date对象大揭秘
|
2天前
|
存储 JSON JavaScript
JavaScript 魔法镜:透视对象Object与执行上下文的内在奥秘
JavaScript 魔法镜:透视对象Object与执行上下文的内在奥秘
|
2天前
|
存储 前端开发 JavaScript
JavaScript 数组魔法阵:解锁数据的无限潜能
JavaScript 数组魔法阵:解锁数据的无限潜能
|
2天前
|
JavaScript 索引
JS数组常用方法总结,含ES6新方法,附示例代码
JS数组常用方法总结,含ES6新方法,附示例代码