javascript - 检测对象中是否存在某个属性

小灰灰 2022-02-04 08:17 418阅读 0赞

参考一:

var array = [{‘yaxis’:22,’lines’:true},{‘lines’:true}]

var isTrue = array.some(val => {

  1. return val.yaxis

})

if(isTrue === true){
console.log(‘数组对象里面存在 属性 yaxis’)
}

1.使用in关键字。

该方法可以判断对象的自有属性和继承来的属性是否存在。

  1. var o={x:1};
  2. "x" in o; //true,自有属性存在
  3. "y" in o; //false
  4. "toString" in o; //true,是一个继承属性
  • 2.使用对象的hasOwnProperty()方法。

该方法只能判断自有属性是否存在,对于继承属性会返回false。

  1. var o={x:1};
  2. o.hasOwnProperty("x");    //true,自有属性中有x
  3. o.hasOwnProperty("y");    //false,自有属性中不存在y
  4. o.hasOwnProperty("toString"); //false,这是一个继承属性,但不是自有属性

3.用undefined判断

自有属性和继承属性均可判断。

  1. var o={x:1};
  2. o.x!==undefined; //true
  3. o.y!==undefined; //false
  4. o.toString!==undefined //true

该方法存在一个问题,如果属性的值就是undefined的话,该方法不能返回想要的结果,如下。

  1. var o={x:undefined};
  2. o.x!==undefined; //false,属性存在,但值是undefined
  3. o.y!==undefined; //false
  4. o.toString!==undefined //true

4.在条件语句中直接判断

  1. var o={};
  2. 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=>{

    1. if(item.name=='Alex'){
    2. alert('存在这个元素');
    3. }

    })

  3. 但实际中往往是需要动态添加或删除对象或元素的,用这个方法的话不好操作,可能会添加或删除掉多个,可以是用string的indexOf方法来判断

    const option = {name:’111’}
    // 如果数组里面本身不存在这个对象则把这个加进去
    if(JSON.stringify(arr).indexOf(JSON.stringify(option))==-1){

    1. arr.push(option); // 进行动态的操作

    }

    这个判断是可以,但存在一个问题需要注意一下,如果对象的顺序不一样,是不能检测到重复的

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

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

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

  1. 还有一个常用方法是设一个flag来做判断的标识

    let flag = true;
    let msg = ‘’;
    let arr = []

    if(arr.length<6){

    1. arr.forEach(item=>{
    2. if(data.id===item.id){ // 对象里的唯一标识id
    3. msg = '请勿重复添加!'
    4. flag = false;
    5. }
    6. })

    }else{

    1. msg = '最多添加6个!'
    2. flag = false;

    }

    if(flag){ // 如果满足条件-数组长度小于6,当前添加的值在数组里不存在,就把值添加进去

    1. arr.push(data)

    }else{ // 否则弹出提示信息

    1. alert(msg)

    }

    1. 利用数组API some来判断

      var result = arr.some(item=>{
      if(item.name==’张三’){

      1. 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);

发表评论

表情:
评论列表 (有 0 条评论,418人围观)

还没有评论,来说两句吧...

相关阅读