当前位置:网站首页>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 }]
边栏推荐
- 洛谷题解P4326 求圆的面积
- ##ansible自动化运维架构与简介
- 成员变量与局部变量的区别有哪些
- Game network UDP + FEC + KCP
- 邮差"头":{“retCode”:“999999”
- To ensure that the communication mechanism
- Legal education combined with VR panorama, intuitively feel and learn the spirit of the rule of law
- Flutter 运动鞋商铺小demo
- JVM Tuning-GC Fundamentals and Tuning Key Analysis
- 【Harmony OS】【FAQ】Hongmeng Questions Collection 2
猜你喜欢

Semaphore 基本原理

Projector reached the party benefits 】 【 beginners entry - brightness projection and curtain selection - from entry to the master

To ensure that the communication mechanism

第三章 Scala运算符

The electromagnetic compatibility EMC protection study notes

一文解答DevOps平台的制品库是什么

An article to answer what is the product library of the DevOps platform

什么是 DevOps?看这一篇就够了!

功率放大器的设计要点

使用百度EasyDL实现森林火灾预警识别
随机推荐
如何优雅的消除系统重复代码?
如何实时监控销售数据?销售看板来帮你!
2022 Hangzhou Electric Multi-School 4
《2022 年上半年全球独角兽企业发展研究报告》发布——DEMO WORLD世界创新峰会圆满落幕
A detailed explanation of what is software deployment
全差分运放:THS4140
SAP ABAP SteamPunk 蒸汽朋克的最新进展 - 嵌入式蒸汽朋克
AIX7.1安装Oracle11g补丁33829709(PSU+OJVM)
《电磁兼容防护EMC》学习笔记
我在羊毛和二手群里报复性消费
GPS satellite synchronization clock, NTP network synchronization clock, Beidou clock server (Jingzhun)
What are the useful IT asset management platforms?
长期更新的一些 pytorch 知识点总结
Task Computing【动态规划_牛客】
dot net double 数组转 float 数组
项目里的各种配置,你都了解吗?
##ansible自动化运维架构与简介
Li Mu's deep learning notes are here!
分支控制if-else
吴恩达机器学习[13]-支持向量机