码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • js判断一个对象是否在一个对象数组中


    目录

    场景:

    第一个场景解法:如果数组中已经存在,就不能添加

    小结:

    第二个场景解法: 对象数组去重


    场景:


    有一个对象数组,如:

    var arr = [{"appName":"小何","appId":"1"},{"appName":"小王","appId":"2"}]

    一般来说,常见的场景有两个:

    第一个是,比如鼠标点击按钮,往数组里push()一个对象,如果数组中已经存在了,那么就得提示不能添加。

    第二个是,push()之后做去重处理,既对象数组去重。 


    第一个场景解法:如果数组中已经存在,就不能添加

    使用includes()方法,意为存在,存在返回true,不存在返回false,重点是要结合JSON.stringify()序列化为字符串后再判断,以下是示例代码:

    1. var arr = [{"appName":"小何","appId":"1"},{"appName":"小王","appId":"2"}]
    2. var obj = {"appName":"小王","appId":"2"}
    3. //如果数组arr中不存在字符串JSON.stringify(obj),那就可以添加,反之,则不添加
    4. if(JSON.stringify(arr).includes(JSON.stringify(obj)) === false){
    5. console.log('不存在')
    6. arr.push(obj)
    7. }else{
    8. console.log('已存在')
    9. }

     

    小结:

    es6新增的includes()方法很强大,字符串,数组,对象均可使用,返回一个布尔值,比之前常用的indexof()语义化更强,且includes()的性能不错!


    第二个场景解法: 对象数组去重

    我理解的对象数组去重是这样的:

    就是他们的属性和值都得一样,且他们的长度也是一样的。

    也就是说,key和value都得一样才行,而且不能多不能少。

    试着手写了一下,嵌套了好几层循环,性能不好,直接一步到位,以下是我的最优解:

    lodash是前端常用的JS方法库,就是将很多方法封装起来,方便使用。 

    使用lodash的 _.uniqWith()方法,结合_.isEqual比较函数,即可较为完美的解决问题。

    需要注意的是,_.isEqual()方法也是非常强大的,作用是比较两个对象是否相等,这个方法非常实用,我经常用它,他是深层递归的,推荐。

     代码示例:

    1. var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];
    2. _.uniqWith(objects, _.isEqual);
    3. // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]

  • 相关阅读:
    MySQL——排序查询
    ZNS SSD是否真的前途一片光明?
    JDK动态代理
    交叉导轨这样使用,能省不少事!
    css3实现一个3d楼梯动画
    浅谈制药企业安全供电系统的设计与应用
    IP证书有什么作用?怎么申请?
    (Java高级教程)第五章Linux使用和程序部署-第一节:Linux基本介绍和云服务器使用
    SpringBoot是什么?SpringBoot的优缺点有哪些?
    关于js中 0 == ‘ ‘ 为 true 的问题
  • 原文地址:https://blog.csdn.net/wanghaoyingand/article/details/126149906
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号