var arr = [{id:1,name:'王五',age:5},{id:2,name:'赵六',age:6}];
数组的indexOf方法只能判断数组中是否存在某个元素,不能对元素进行修改或删除,存在返回当前索引不存在返回-1
var arr = [1,2,3,4];
arr.indexOf(1) // 0
arr.indexOf(8) // -1
通过遍历数组后判断对象的属性是否相同也能判断数组中是否存在某个对象,但也不能对元素进行修改或删除
arr.forEach(item=>{
if(item.name=='王五'){
alert('存在这个元素');
}
})
如果需要动态添加或删除对象或元素,用上面的方法不好操作,可能会添加或删除掉多个,可以使用string的indexOf方法来判断
var obj = {id:1,name:'王五',age:5}
// 如果数组里面本身不存在这个对象则把这个加进去
if(JSON.stringify(arr).indexOf(JSON.stringify(option))==-1){
arr.push(obj); // 将对象添加到数组中(后增)
}
这个方法存在一个问题,就是对象的顺序不一样时,不能检测到重复
例如 arr = [{id:1,name:‘王五’,age:5}];
obj = {id:1,name:‘王五’,age:5}
利用上述方法检测,实际上该数组是存在这个obj对象,但用string的indexOf方法检测是不存在这个obj对象
还有一个常用方法是设一个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)
}
利用数组API some来判断
var result = arr.some(item=>{
if(item.name=='王五'){
return true
}
})
console.log(result) // 如果arr数组对象中含有name:'王五',就会返回true,否则返回false
if(result){ // 如果存在
// do something
}