当前位置:网站首页>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 }]
边栏推荐
- 【Gopher 学个函数】边学边练,简单为 Go 上个分
- 云存储硬核技术内幕——(13) 抓手,组合拳与闭环
- 一文详解什么是软件部署
- Unity AR阴影投射透明地面 仅渲染模型实时阴影 Shader实现
- Roslyn 在 msbuild 的 target 判断文件存在
- 从-99打造Sentinel高可用集群限流中间件
- 吴恩达机器学习[13]-支持向量机
- Go 事,Gopher 要学的数字类型,变量,常量,运算符 ,第2篇
- 实战:10 种实现延迟任务的方法,附代码!
- Request method ‘POST‘ not supported。 Failed to load resource: net::ERR_FAILED
猜你喜欢
【伸手党福利】投影仪初学者入门——投影亮度及幕布选择——从入门到精通
2022 Hangzhou Electric Multi-School 4
我在羊毛和二手群里报复性消费
RepVGG学习笔记
"Research Report on the Development of Global Unicorn Enterprises in the First Half of 2022" released - DEMO WORLD World Innovation Summit ended successfully
Flutter 运动鞋商铺小demo
What is an artifact library in a DevOps platform?What's the use?
#夏日挑战赛# HarmonyOS 实现一个滑块验证
跟我学 UML 系统建模
numpy入门详细代码
随机推荐
Beginner crawler notes (collecting data)
《电磁兼容防护EMC》学习笔记
吴恩达机器学习[13]-支持向量机
Unity AR阴影投射透明地面 仅渲染模型实时阴影 Shader实现
吴恩达机器学习[12]-机器学习系统设计
【Go事】一眼看穿 Go 的集合和切片
爬虫小白笔记(昨天的对于注意解析数据的补充)
云存储硬核技术内幕——(10)
基于 Next.js实现在线Excel
Online Excel based on Next.js
面渣逆袭:MySQL六十六问,两万字+五十图详解
dotnet core 添加 SublimeText 编译插件
Byte、Short、Integer、Long内部缓存类的对比与源码分析
In action: 10 ways to implement delayed tasks, with code!
攻防视角下,初创企业安全实战经验分享
SAP ABAP SteamPunk 蒸汽朋克的最新进展 - 嵌入式蒸汽朋克
RSA306B,500,600系列API接口代码
【Es6中的promise】
2022 Hangzhou Electric Multi-School 4
Codeforces Round #811 A~F