3.js中判断数组中是否存在某个对象/值,判断数组里的对象是否存在某个值 的五种方法 及应用场景
一、当数组中的数据是简单类型时:
应用js中的indexof
方法:存在则返回当前项索引,不存在则返回 -1。
var arr=[1,2,3,4]
var str=2
// 如果不等于-1则代表存在
if(arr.indexOf(str) != -1){
console.log('存在!')
}
// 否则不存在
else{
console.log('不存在!')
}
二、当数组中的数据是复杂类型的对象时:
方法1:json化成字符串再用indexOf
因为对象是复杂类型的,得先化成字符串再用indexOf.
注意:indexof 你得确保查找的这个对象与数组内的对象完全一致,对象里每一个键值对的位置都一致,才能说是完全相等的对象。
比如说,这个数组里的对象arr_obj本来就是由obj加进去的,此时obj判断是不是已经加进去了。如果加进去了就不用再加了,这种情况可以适用。
indexof原本并不是用于数组里比较复杂类型的对象,它主要用于简单数据类型。
用法:
//验证条件
if(JSON.stringify(arr).indexOf(JSON.stringify(obj)) == -1){
console.log('该项不存在!')
}else{
console.log('该项存在!')
}
//对象添加进数组后,查找数组中这个对象。
console.log(arr[arr.indexOf(obj)]) //简单类型
console.log(arr[JSON.stringify(arr).indexOf(JSON.stringify(obj))]) //复杂类型
//查找数组中这个对象的某个键 count键
console.log(arr[JSON.stringify(arr).indexOf(JSON.stringify(obj))].count)
应用:
obj={
id:1,name:'xiaoming',age:16,count:0}
// obj={id:4,name:'xiaoli',age:17,count:0} //验证不存在
arr=[
{
id:1,name:'xiaoming',age:16,count:0},
{
id:2,name:"xiaobai",age:19,count:0}
]
if(JSON.stringify(arr).indexOf(JSON.stringify(obj)) == -1){
//数组中不存在该项,把该项添加到数组中
console.log('该项不存在!')
arr.push(obj);
console<