当前位置:网站首页>js判断一个对象是否在一个对象数组中
js判断一个对象是否在一个对象数组中
2022-08-04 15:42:00 【接着奏乐接着舞。】
目录
场景:
有一个对象数组,如:
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 }]
边栏推荐
- Roslyn 在多开发框架让 msbuild 的 Target 仅运行一次
- To ensure that the communication mechanism
- postman “header“:{“retCode“:“999999“
- 全球电子产品需求放缓,三星手机越南工厂每周只需要干 3~4 天
- 吴恩达机器学习[12]-机器学习系统设计
- Go Go 简单的很,标准库之 fmt 包的一键入门
- 解决dataset.mnist无法加载进去的情况
- GPS satellite synchronization clock, NTP network synchronization clock, Beidou clock server (Jingzhun)
- For循环控制
- AAAI‘22 推荐系统论文梳理
猜你喜欢

你以为在做的是微服务?不!你做的只是分布式单体!

For循环控制

张乐:研发效能的黄金三角及需求与敏捷协作领域的实践

Matlab计算随模拟时间变化的热导率

《电磁兼容防护EMC》学习笔记
MySQL当前读、快照读、MVCC
![吴恩达机器学习[9]-神经网络学习](/img/07/0eeb3cd5f3ea7c2baeec1732ea8d9a.png)
吴恩达机器学习[9]-神经网络学习

"Research Report on the Development of Global Unicorn Enterprises in the First Half of 2022" released - DEMO WORLD World Innovation Summit ended successfully

RepVGG学习笔记

Pisanix v0.2.0 发布|新增动态读写分离支持
随机推荐
Redis持久化操作
软件性能测试包括哪些内容?国内权威软件检测机构排名
uni-app之renderjs
【已解决】allure无法生成json文件和AttributeError: module ‘allure‘ has no attribute ‘severity_level‘
Request method ‘POST‘ not supported。 Failed to load resource: net::ERR_FAILED
Go Go 简单的很,标准库之 fmt 包的一键入门
张乐:研发效能的黄金三角及需求与敏捷协作领域的实践
素士科创板IPO撤单,雷军失去“电动牙刷第一股”
OGG判断mgr状态并自动启动脚本
Why, when you added a unique index or create duplicate data?
GET 和 POST 请求的区别
An article to answer what is the product library of the DevOps platform
Manacher(求解最长回文子串)
【二叉树】根据描述创建二叉树
AAAI‘22 推荐系统论文梳理
24、shell编程-流程控制
MySQL select加锁分析
荐书 | 《大脑的奥秘:人人要懂的脑科学》:大脑里面有什么
DocuWare平台——用于文档管理的内容服务和工作流自动化的平台(上)
直播回放含 PPT 下载|基于 Flink & DeepRec 构建 Online Deep Learning