如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接信息。

在本文中,您将会看到:如何在js中,如何判断某个数组中是否含有某个值。公用上就类似于phpin_array函数。本文中的几个方案,可以在node服务器端执行,也可以在高版本的浏览器中执行。在下面方案的截图中,苏南大叔可能会交替使用相关截图。

环境描述

本文的测试环境是node8.11.1,chrome67.0.3396.99。本文的测试数据是下面的两个值:

let arr=["a","b","c"];
let arr2={"a":"aaa","b":"bbb","c":"ccc"};

方案一,in

in操作符针对的是key,而非value。而对于普通的一维数组来说,key是隐藏的。所以,对于判断某个数组中是否含有某个值来说,这个方案并不合适。

in方案测试代码如下:

console.log("1:","a" in arr);
console.log("2:","aa" in arr);
console.log("3:",2 in arr);
console.log("4:",5 in arr);
console.log("5:","a" in arr2);
console.log("6:","aa" in arr2);

测试结果是:

js如何判断数组含有某值,in/includes/inArray/indexOf方案对比 - node_in
js如何判断数组含有某值,in/includes/inArray/indexOf方案对比(图2-1)

方案二,indexOf

苏南大叔的印象里面,indexOf是用于字符串的。但是在这里,用于一个数组的话,也是可以执行的。但是用在一个对象obj上面的时候,是报错的。

console.log("7:",arr.indexOf("a"));
console.log("8:",arr.indexOf("aa"));
// console.log("9:",arr2.indexOf("b"));    //报错
// console.log("10:",arr2.indexOf("aaa")); //报错

结果是:

7: 0
8: -1

方案三,includes

indexOf一样,includes仅能用于数组操作。

console.log("11:",arr.includes("a"));
console.log("12:",arr.includes("aa"));
//console.log("13:",arr2.includes("a"));  //报错
//console.log("14:",arr2.includes("aa"));  //报错

运行结果是:

11: true
12: false

方案四,自定义函数inArray

这个自定义函数inArray,可以用于数组,也可以用于对象。

当然,在php里面,这个函数名字就应该是in_array,那么在js的世界里面,就入乡随俗一下,换个inArray名字吧~
function inArray(search,array){
    for(var i in array){
        if(array[i]==search){
            return true;
        }
    }
    return false;
}
console.log("15:",inArray("a",arr));
console.log("16:",inArray("aa",arr));
console.log("17:",inArray("a",arr2));
console.log("18:",inArray("bbb",arr2));

运行结果是:

newsn.net:这里是【评论】可见内容

js如何判断数组含有某值,in/includes/inArray/indexOf方案对比 - node_in_array
js如何判断数组含有某值,in/includes/inArray/indexOf方案对比(图2-2)

总结

  • 数组是否包含某个值的判断方案有:includes/indexOf/inArray
  • 数组是否包含有个键的判断方案是:in
  • 对象是否包含某个属性值的方案是:inArray
  • 对象是否包含某个属性名的方案是:in
  • 数组或者对象通用的判断方式包括:in/inArray

更多node相关经验文章,请点击苏南大叔的文章列表:

 【js】秘籍文章入口,仅传授于有缘之人   js    node

本站的忠实读者小伙伴,正在阅读下面这些文章:

欢迎转载传播本篇原创文章,转载请保留链接及作者信息。
欢迎指正文字或逻辑错误,将会择优在文末列出您的信息。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

苏南大叔需要你的支持

感谢您的打赏,让我更有动力,将更多精彩教程文章,呈现给大家!谢谢!