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

 

 


 

 

当对象是同一个(堆中的引用指向的是同一个),可以直接使用includes判断

const obj1 = {id: 1, name: 'zhangsan'}
const obj2 = {id: 2, name: 'lisi'}
const arr = [obj1, obj2]
const contains = arr.includes(obj1) // true

如果对象不是同一个,但是在业务上是属于同一个的,这种情况include就不行了,示例如下

const obj1 = {id: 1, name: 'zhangsan'}
const obj2 = {id: 2, name: 'lisi'}
const arr = [obj1, obj2]
const contains = arr.includes({id: 1, name: 'zhangsan'}) // false

针对以上情况,我们可以自行编写判断逻辑通过find函数获取,比如id一样我们就认为是同一个对象

const obj1 = {id: 1, name: 'zhangsan'}
const obj2 = {id: 2, name: 'lisi'}
const arr = [obj1, obj2]
const objOfFind = arr.find(obj => obj.id = 1)
const contains = !!objOfFind // true

 

posted @ 2023-03-29 10:29  前端朝花夕拾  阅读(1124)  评论(0)    收藏  举报