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()方法也是非常强大的,作用是比较两个对象是否相等,这个方法非常实用,我经常用它,他是深层递归的,推荐。
代码示例:
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 }]
到此这篇关于js判断一个对象是否在一个对象数组中的文章就介绍到这了,更多相关js判断一个对象在一个对象数组中内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
js对象数组按属性快速排序
按所推荐的程序在IE下跑了下,的确,排序耗时很小. 复制代码 代码如下: <script> /* * 洗牌 */ function getRandomPlayCard(m){ var array1=new Array(m); for(var i=0;i<m;i++){ var rnd=Math.floor(Math.random()*(i+0.99999)) array1[i]=array1[rnd]; array1[rnd]=i; } return array1; }; /* * 快速
-
JS对象数组去重的3种方法示例及对比
目录 一.去重前后数据对比 二.使用方法 1.使用filter和Map 2.使用reduce 3.使用for循环 三.2400条数据,三种方法处理时间对比 总结 一.去重前后数据对比 // 原数据是这样的 // 去重后数据是这样的 [{ [{ "goodsId": "1", "goodsId": "1", "quota": 12, "quota": 12, "skuId&quo
-
js对象数组和对象的使用实例详解
数组 var arr = new Array(); //或者 var arr = []; //或者 var arr = [{index:'0'},{address:'1'}]; var obj_1 = { index:'1', index:'2'}; var obj_2 = { index:'3', index:'3'}; arr.push(obj_1,obj_2); //添加 var pop_data = arr.pop(); //删除并返回数组的最后一个元素. //遍历 for(var i=
-
js 根据对象数组中的属性进行排序实现代码
这篇文章主要介绍了js 根据对象数组中的属性进行排序实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码如下 var arr = [ {name:'a',age:9}, {name:'b',age:12}, {name:'c',age:8} ]; arr.sort((a,b)=>{ return a.age - b.age }); function compare(property){ return function(a,b){ var
-
js 定义对象数组(结合)多维数组方法
在php中定义数组很简单,但是在js中如果搞成字符为下标会出错,所以结合对象来搞 var top_ = { 'index':'首页', 'user':'用户', 'tree':'模块树' } ; var all_list = [ { "index": [ {'name':'网站栏目管理','url':'1.html'}, {'name':'网站栏目管理2','url':'2.html'} ] }, { "user": [ {'name':'用户管理','url':'
-
javascript如何定义对象数组
问题如下,已经完成单个对象的简单应用,希望定义一个数组,能包含多个student. 复制代码 代码如下: var student = new Object(); student.name = "Lanny"; student.age = "25"; student.location = "China"; var json = JSON.stringify(student); 方法一: 复制代码 代码如下: var students = []; s
-
javascript中判断一个值是否在数组中并没有直接使用
在JS中要判断一个值是否在数组中并没有函数直接使用,如PHP中就有in_array()这个函数.但我们可以写一个类似in_array()函数来判断是一个值否在函数中 例1 复制代码 代码如下: /* * * 判断在数组中是否含有给定的一个变量值 * 参数: * needle:需要查询的值 * haystack:被查询的数组 * 在haystack中查询needle是否存在,如果找到返回true,否则返回false. * 此函数只能对字符和数字有效 * */ function findnum(){
-
JS实现根据指定值删除数组中的元素操作示例
本文实例讲述了JS实现根据指定值删除数组中的元素操作.分享给大家供大家参考,具体如下: 解决问题: 1 .JS判断元素是否在数组内 2. JS根据指定值删除数组中的元素 要点:相当于jquery 的 $.inArray() 这个方法 原生js 如果想删除数组,有一个函数 splice() ~~ 删除元素,并向数组添加新元素. 这个货 是根据数组内的下标 也就是索引来 删除元素的比如: var arrList = ['a','b','c','d']; arrList.splice(2,1);
-
jQuery简单判断值是否存在于数组中的方法示例
本文实例讲述了jQuery简单判断值是否存在于数组中的方法.分享给大家供大家参考,具体如下: <!DOCTYPE> <html> <head> <title>jquery判断值是否存在于数组中</title> <meta charset="utf-8"> </head> <body> <script src="http://libs.baidu.com/jquery/2.0.
-
JS判断是否为JSON对象及是否存在某字段的方法(推荐)
实例如下: $.ajax({ type: 'POST', url: url, success(function(data){ //判断是否为JSON对象 if(typeof(data) == "object" && Object.prototype.toString.call(data).toLowerCase() == "[object object]" && !data.length){ alert("is JSON 0
-
js每隔两秒输出数组中的一项(实例)
实例如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="jquery/2.0.0/jquery.min.js"></script> </head> <body> <div i
-
JavaScript判断变量名是否存在数组中的实例
直接上代码: JavaScript代码: var array=[{name:"张珊",sex:"男"}]; console.log(array); if(array[0].name){ console.log('name');//返回name } if(array[0].size){ console.log('size') }else{ console.log('no size');//返回no size } 打印结果: 以上这篇JavaScript判断变量名是否存
-
js删除对象/数组中null、undefined、空对象及空数组方法示例
这两天在项目中遇到后台需要传的数据为不能有null,不能有空值,而这个数据又是一个庞大的对象,对组集合,所以写了个方法来解决这个问题.为了兼具所有的种类类型,封装了方法,代码如下: let obj = { a: { a_1: 'qwe', a_2: undefined, a_3: function (a, b) { return a + b; }, a_4: { a_4_1: 'qwe', a_4_2: undefined, a_4_3: function (a, b) { return a +
-
JS判断浏览器之Navigator对象
The Navigator Object 导航对象 The JavaScript Navigator object contains all information about the visitor's browser. We are going to look at two properties of the Navigator object: JS导航对象包含所有有关访问这者浏览器的信息.我们将看看两个导航对象的产物: appName - holds the name of the br
-
js 判断一个元素是否在页面中存在
1. 判断表单元素是否存在(一) 复制代码 代码如下: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->if("periodPerMonth" in document.theForm) { return true; } else{ return false; } 2. 判断页面元素是否存在 复制代码 代码如下: if(document
随机推荐
- 安卓 获取手机IP地址的实现代码
- Java 抽象类定义与方法实例详解
- PHP与jquery实时显示网站在线人数实例详解
- ubuntu vps安装docker报错:Cannot connect to the Docker daemon at unix:///var/run/docker.sock.问题解决
- 浅谈JS中String()与 .toString()的区别
- linux下使用ssh远程执行命令批量导出数据库到本地
- SQL2005 ROW_NUMER实现分页的两种常用方式
- jQuery统计指定子元素数量的方法
- jQuery 重复加载错误以及修复方法
- JS中Iframe之间传值的方法
- Android startActivityForResult实例详解
- Java打印出所有的水仙花数的实现代码
- 浅谈JVM核心之JVM运行和类加载
- c#判断email地址是否为合法
- PHP学习之整理字符串
- 利用C语言实现HashTable
- c# list部分操作实现代码
- 一条SQL语句查询多个数据库
- Linux下Docker CE使用从包中安装的方式详解
- Centos7的apache网站环境搭建wordpress
其他
- android保存图片到最明显的位置
- angular引入外部库
- mysql 怎么查询同时更新
- oracle archivelog 自动删除
- 微信怎样发长信息后面加个省略号更多
- erlang中初始化记录
- js 字符串和数字 占用字节
- vue watch中调用方法没执行
- spring cloud gateway 去掉路径
- pytorch优化器 多网络
- hfss与python
- vue2.0 防抖插件
- python 中request设置支持中文
- flask 一个<form> 多个button
- vue 本地图片404
- python凯撒密码微实例3.2
- python BP神经网络实现图像分类
- python 把向量中的0元素变成1
- 将本地依赖加入仓库供项目引用
- vue keep-alive 多级路由缓存