js中判断对象数组中是否存在某个对象,以及使用判断是否存在某个元素的indecOf()和find()方法

判断数组中是否存在某个元素数组

1.直接用indexOf(),若是存在则返回当前索引,若是不存在则返回-1;函数

var arr=[1,2,3,4]
arr.indexOf(3) // 2
arr.indexOf(5) // -1

注意:返回某个指定的字符串在数组中首次出现的位置,若是要查找最后出现的位置,使用lastIndexOf() 测试

2. find():找到第一个符合条件的数组元素,他的参数是一个回调函数,全部的数组元素依次遍历该回调函数,直到找出第一个返回值为true的元素,而后返回该元素,不然返回undefined。spa

注意:当数组中的元素在测试条件时返回true时,find()返回符合条件的元素,以后的值不会再调用执行函数
注意:find()对于空数组,函数是不执行的;code

注意:fund()并无改变数组的原始值。对象

arr.find(function(value) {
    if(value === 要查找的值) {
        //则包含该元素
    }
})

 3.findIndex()索引

此方法和find()方法十分类似,返回第一个符合条件的数组元素的位置,若是全部元素都不符合条件,则返回-1.字符串

注意:当数组中的元素在测试条件时返回true,findIndx()返回符合条件的元素的索引位置,以后的值不会再调用执行函数。回调函数

注意:findIndex()对于空数组,函数是不会执行的。string

注意:findIndex()并无改变数组的原始值。

 

 

判断对象数组

1.只是判断对象的属性是否相同

arr.forEach(item=>{
    if(item.name=='Alex'){
        alert('存在这个元素');
    }
})

2.须要动态添加或删除对象和元素的

const option = {name:'111'}
// 若是数组里面自己不存在这个对象则把这个加进去
if(JSON.stringify(arr).indexOf(JSON.stringify(option))==-1){
           arr.push(option); // 进行动态的操做
}

 须要注意:

例如arr = [{name:'张三', sex:'男'}]

option = {sex:'男', name:'张三'}

利用上述方法检测的话,实际上该数组是存在这个数组对象的,但若是用string的indexOf方法是不能检测对的,用这个方法的时候这个点须要注意

3.设置flag来作判断标识

let flag = true;
let msg = '';
let arr = []
if(arr.length<6){
    arr.forEach(item=>{
        if(data.id===item.id){ // 对象里的惟一标识id
            msg = '请勿重复添加!'
            flag = false;
        }
    })
}else{
    msg = '最多添加6个!'
    flag = false;
}
if(flag){ // 若是知足条件-数组长度小于6,当前添加的值在数组里不存在,就把值添加进去
    arr.push(data)
}else{ // 不然弹出提示信息
    alert(msg)
}

5.利用数组的some()方法

var result = arr.some(item=>{
   if(item.name=='张三'){
      return true 
  } 
})
console.log(result) // 若是arr数组对象中含有name:'张三',就会返回true,不然返回false
if(result){ // 若是存在
  // do something
 }