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

 

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 华为交换机的基本配置命令_华为交换机配置手册

    华为交换机的基本配置命令_华为交换机配置手册华为交换机基础配置命令参考基础配置用户模式登陆设备后,直接进入用户模式,只能执行少量查看配置的命令;视图模式用户模式下,输入system-view进入视图模式,可执行设备全局配置的命令;局部配置模式视图模式下,输入局部配置命令,如interfaceGE1/0/0,进入GE1/0/0端口配置模式,此外局部配置模式有很多种,可根据不同需求进入vla…

  • 计算机应用模块数量如何填写,职称计算机考试科目、模块数量介绍

    计算机应用模块数量如何填写,职称计算机考试科目、模块数量介绍原标题:职称计算机考试科目、模块数量介绍全国计算机应用能力考试坚持”实事求是,区别对待,逐步提高”的原则,不同地区、不同部门根据本地区、本部门的实际情况,确定适合本地区、本部门的考试范围要求。1、不同地区和部门自主确定应考科目数量在对专业技术人员计算机应用能力的具体要求上,各省、自治区、直辖市人事厅(局)和国务院有关部门干部(人事)部门应结合本地区、本部门的实际情况,确定本地区、本部门在评聘专业技…

  • 左连接,右连接,内连接,全连接的区别及使用方式_外连接与内连接的区别

    左连接,右连接,内连接,全连接的区别及使用方式_外连接与内连接的区别左连接,右连接,内连接,全连接的区别及使用众所周知,我们在写sql时经常会用到多表查询数据,这就是涉及到连接的问题包括,左连接,右连接,内连接,全外连接。定义:左连接(leftjoin):返回包括左表的所有记录和右表中连接字段相等的记录右连接(rightjoin):返回包括右表的所有记录和左表中连接字段相等的记录等值连接或者叫内连接(innerjoin):只返回两表相连相等的行全外连接(fulljoin):返回左右表中所有的记录和左右表中连接字段相等的记录。只说概念还不够清晰举个例子

  • 基于回归分析的房价预测模型_房价模型基本原理

    基于回归分析的房价预测模型_房价模型基本原理回归模型与房价预测

  • MySQL8.0.26安装配置教程(windows 64位)

    MySQL8.0.26安装配置教程(windows 64位)一.进入MySQL官网下载安装进入Mysql官网MySQL点击DOWNLOADS下拉页面点击红框内容跳转页面后点击红框下载后并解压到目标文件夹(一定要记住路径)二.配置并初始化MySQL首先创建一个txt文档,并复制如下代码其中安装目录需更改为你所下载的目录存放目录需改为事先新建好的data文件夹目录[mysqld]#设置3306端口port=3306#设置mysql的安装目录basedir=D:\mysql-8.0.26-winx.

  • 第四章:hadoop 启动wordcount实例,包括hadoop自带jar包和eclipsejar包。hdfs常用命令[通俗易懂]

    第四章:hadoop 启动wordcount实例,包括hadoop自带jar包和eclipsejar包。hdfs常用命令[通俗易懂]第四章:hadoop 启动wordcount实例,包括hadoop自带jar包和eclipsejar包。hdfs常用命令

发表回复

您的电子邮箱地址不会被公开。

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