参考一:
var array = [{'yaxis':22,'lines':true},{'lines':true}]
var isTrue = array.some(val => {
return val.yaxis
})
if(isTrue === true){
console.log('数组对象里面存在 属性 yaxis')
}
该方法可以判断对象的自有属性和继承来的属性是否存在。
var o={x:1};
"x" in o; //true,自有属性存在
"y" in o; //false
"toString" in o; //true,是一个继承属性
该方法只能判断自有属性是否存在,对于继承属性会返回false。
var o={x:1};
o.hasOwnProperty("x"); //true,自有属性中有x
o.hasOwnProperty("y"); //false,自有属性中不存在y
o.hasOwnProperty("toString"); //false,这是一个继承属性,但不是自有属性
自有属性和继承属性均可判断。
var o={x:1};
o.x!==undefined; //true
o.y!==undefined; //false
o.toString!==undefined //true
该方法存在一个问题,如果属性的值就是undefined的话,该方法不能返回想要的结果,如下。
var o={x:undefined};
o.x!==undefined; //false,属性存在,但值是undefined
o.y!==undefined; //false
o.toString!==undefined //true
var o={};
if(o.x) o.x+=1; //如果x是undefine,null,false," ",0或NaN,它将保持不变
参考二:
var a =[{"name":"1111"},{"name":"222"}]
console.log(JSON.stringify(a).indexOf("11111")!=-1);
把数组和对象全转成string, 然后使用string.indexOf判断是否存在
对象转化成数组
objToArr: function(obj, defaultO) { //把对象转成数组 如果 default 为真 加入一个默认值
var arr = [];
for(var prop in obj) {
arr.push({
key: prop,
val: obj[prop]
})
};
if(defaultO) {
arr.unshift({
key: '',
val: '请选择'
});
}
return arr;
参考三:
判断数组对象中是否包含某个对象,判断2个对象是否相等
var arr =[
{name:'zhangsan'},
{name:'lisi'},
{name:'wangwu'}
];
var json1 = {name:"zhangsan"};
// 方法一:(兼容ie8)
console.log(JSON.stringify(arr).indexOf(JSON.stringify(json1)));
// 方法二: (前提是匹配和被匹配的存在赋值关系)
var json2 = arr[0];
var json3 = {name:'zhangsan'};
console.log('json2',arr.indexOf(json2)); // 存在
console.log('json3',arr.indexOf(json3)); //不存在
参考四:
判断对象数组中是否存在某个对象:
1. 如果要判断数组中是否存在某个元素的话很好判断,直接用数组的indexOf方法就好,存在返回当前索引不存在返回-1
var arr=[1,2,3,4] arr.indexOf(3) // 2 arr.indexOf(5) // -1
2. 要只是判断的话是可以遍历后判断对象的属性是否相同的,像这种:
arr.forEach(item=>{ if(item.name=='Alex'){ alert('存在这个元素'); } })
3. 但实际中往往是需要动态添加或删除对象或元素的,用这个方法的话不好操作,可能会添加或删除掉多个,可以是用string的indexOf方法来判断
const option = {name:'111'} // 如果数组里面本身不存在这个对象则把这个加进去 if(JSON.stringify(arr).indexOf(JSON.stringify(option))==-1){ arr.push(option); // 进行动态的操作 }
这个判断是可以,但存在一个问题需要注意一下,如果对象的顺序不一样,是不能检测到重复的
例如arr = [{name:'张三', sex:'男'}]
option = {sex:'男', name:'张三'}
利用上述方法检测的话,实际上该数组是存在这个数组对象的,但如果用string的indexOf方法是不能检测对的,用这个方法的时候这个点需要注意
4. 还有一个常用方法是设一个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. 利用数组API some来判断
var result = arr.some(item=>{ if(item.name=='张三'){ return true } }) console.log(result) // 如果arr数组对象中含有name:'张三',就会返回true,否则返回false if(result){ // 如果存在 // do something }
参考五:
可以用数组的indexOf函数,方法arr.indexOf(find,start);
find:要找的内容,必须;
start:查找开始下标,可选;
返回:查找数据所在的下标,如果没找到,返回-1
如果只要知道是否有8这个数字,直接调用arr.indexOf(8),如果返回值不为-1,说明找到了
var s=[1,2,3,5,6,9];
var u=s.indexOf(5);//返回5所在的下标3
var d=s.indexOf(8);//返回-1
console.log(u);
console.log(d);