js判断属性是否存在(javascript的特点)

参考一:vararray=[{‘yaxis’:22,’lines’:true},{‘lines’:true}]varisTrue=array.some(val=>{returnval.yaxis})if(isTrue===true){console.log(‘数组对象里面存在属性yaxis’)}1.使用in关键字。该方法可…

大家好,又见面了,我是你们的朋友全栈君。

参考一:

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

var isTrue = array.some(val => {

    return val.yaxis

})

if(isTrue === true){

  console.log(‘数组对象里面存在 属性 yaxis’)
}

1.使用in关键字。

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

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

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

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

3.用undefined判断

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

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

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

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

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128907.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux中top命令参数详解

    Linux中top命令参数详解top命令用法top命令经常用来监控linux的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况。top的使用方式top[-dnumber]|top[-bnp]参数解释:-d:number代表秒数,表示top命令显示的页面更新一次的间隔。默认是5秒。-b:以批次的方式执行top。-n:与-b配合使用,表示需要进行几次top命令的输出结果。-…

    2022年5月28日
    28
  • UAT SIT QAS DEV PET「建议收藏」

    UAT SIT QAS DEV PET「建议收藏」UAT:UserAcceptanceTesting用户验收测试SIT:SystemIntegrationTesting系统集成测试PET:PerformanceEvaluationTest性能鉴定试验DEV:DevelopmentSystem开发系统QAS:QualityAssurancesystem质量保证体系PRO:professional专…

    2022年6月28日
    38
  • NOIP-铺地毯_zamani地毯

    NOIP-铺地毯_zamani地毯NOIP-铺地毯

    2022年4月21日
    37
  • java环境配置——cmd命令行输入java正常显示而javac则显示不是内部或者外部命令[通俗易懂]

    java环境配置——cmd命令行输入java正常显示而javac则显示不是内部或者外部命令[通俗易懂]重装系统之后第二发,配置pycharm,意料之外的错误,启动的时候竟然要求配置jdk,瞬时蒙蔽,不记得之前有这么一出啊,上图:于是乎就去官网下载了jdk:找到适合自己的版本,我选的最后一个windows64位的,下载好之后直接安装就行,貌似这里不会有啥问题:安装完成需要在配置环境变量,这样系统才能找到我们的java命令,具体的原理大家可以搜一下,网上讲的很清楚~~环境变…

    2022年5月28日
    46
  • 流水线设计思想_全自动流水线

    流水线设计思想_全自动流水线在硬件电路设计中,流水线设计思想是一种很重要的设计思想,这种思想是一种用面积换速度的思想,用更多的资源来实现高速。(面积就是需要的硬件数量,如触发器的数量)顾名思义,流水线思想,就像工厂中的流水线一样。假设是一个手机组装的流水线,一个三个步骤:A,将电池装入手机起来;B,将屏幕组装起来;C,将外壳组装起来。在上面的三个步骤中,流水线的实现就是:A步骤实现后,将手机发往B,然后A继续组装电池,而不会等待C完成再组装;B和C也是一样。流水线思想就是自己完成自己的功能,不会等待。这在硬件电路中就是一种并行的

    2022年8月14日
    1
  • VS2010 MFC读取Excel文件中数据

    VS2010 MFC读取Excel文件中数据前段时间写个工具需要从Excel文件中读取数据,Excel表格数据列数为确定值,行数不确定,从网上搜了些方法尝试,最终达到目的,总结如下:

    2022年6月18日
    26

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号