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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【已解决】【V1.0版本】如何彻底关闭Win10的自动更新并且随时可以恢复?

    【已解决】【V1.0版本】如何彻底关闭Win10的自动更新并且随时可以恢复?更新失败的问题我已经参考这篇文章解决了:【亲测管用】Windows10无法完成更新,正在撤销更改怎么办?精简脚本,在不删除服务的情况下阻止自动更新:【亲测管用】如何使用脚本关闭Win10自动更新服务并阻止其自动启动?如何关闭Windows10的自动更新真的是个大难题.当你遇到Windows更新包安装失败,却又被强制每天重新安装并且失败(安装失败有的时候得重启好几次),望着一遍又一…

    2022年6月4日
    38
  • tkMapper的使用-超详细

    tkMapper的使用-超详细tkMapper已经完成了对单表的通用操作的封装,主要封装在Mapper接口和MysqlMapper接口中,因此我们如果要完成对单表的操作,只需要自定义dao接口继承这两个接口即可。增加方法在准备工作中已经完成,如果想了解此部分内容,可以向上进行查看,此处主要是添加功能的另一种实现————主键回填。注意在进行主键回填的时候,实体类中id必须要用@Id指定一下,要不然映射的时候找不到id;过程如下创建一个users对象,对象的id是需要修改的用户的id,其他信息是需要更改后的信息。…

    2022年10月6日
    4
  • shell语法基础[通俗易懂]

    shell语法基础[通俗易懂]文章目录1.shell基本语法1.1shell中的变量定义和引用1.2shell中无引号、单引号和双引号的区别1.shell基本语法1.1shell中的变量定义和引用(1)变量定义和初始化。shell是弱类型语言(语言中的变量如果有明确的类型则属于强类型语言;变量没有明确类型就是弱类型语言),和C语言不同。在shell编程中定义变量不需要制定类型,也没有类型这个概念。(2)变量定义时可以初始化,使用=进行初始化赋值。在shell中赋值的=两边是不能有空格的。注意:shell对语法非常在意,非常严

    2022年7月12日
    17
  • js 图片加载失败处理方法「建议收藏」

    js 图片加载失败处理方法「建议收藏」个人github:https://github.com/qiilee 欢迎follow在项目中不可避免会用到图片,尤其是列表,有时候图片会加载失败;这样就会显示一个很难看的坏图片缩略图;下面介绍两种方法,解决这个问题:1、如果在你的项目中有引入jQuery插件,你可以使用error([[data],fn])这个函数;$("img").error(function(){  //当图…

    2022年6月2日
    38
  • 经典永不过时的句子_网红的成功案例分析

    经典永不过时的句子_网红的成功案例分析本周给大家分享的数据分析案例是泰坦尼克号幸存者预测的项目,没记错的话,这应该是很多朋友写在简历上的项目经历。如果你目前正在找工作,自身缺少项目经历并且想要充实项目经历的话,可以考虑一下这个项目!…

    2025年8月21日
    3
  • ffmpeg的安装_一锁三抽屉安装视频

    ffmpeg的安装_一锁三抽屉安装视频1.FFmpeg介绍FFmpeg是一个完整的、跨平台的解决方案,用于记录、转换和流化音/视频。FFmpeg采用LGPL或GPL许可证,提供了录制、转换及流化音/视频的完整解决方案。其包含了非常先进的音/视频编解码库libavcodec。FFmpeg是在Linux平台下开发的但是它同样也可以在其他操作系统环境中编译运行,包扩Windows、MacOS等系统。这个项目最早是由FabriceBellard发起的,在2004年至2015年由MichaelNiedermay

    2025年11月8日
    3

发表回复

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

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