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

浙公网安备 33010602011771号