首页 > 如何检查某个成员是否在一个数组内?

如何检查某个成员是否在一个数组内?

如何判断某个成员是否在数组内呢?
目前搜集了两种方法

  1. 自制的check方法,部署在Array.prototype对象上

Array.prototype.check =  function(ele){
    var i, l = this.length, res = false;
    for(i = 0; i < l; i++){
        ele === this[i]?res = true:void 0;
    }
    return res;
}
  1. 聪明一些的方法(别人想出来的),将数组转换为string再用indexOf判断
    arr.toString().indexOf(num)===-1?console.log('not in'):console.log('in');

有没有更好一点的方法呢?


据我所知,主要有以下这些方法。
indexOf
lastIndexOf
includes
find
findIndex

甚至可以通过filter,判断过滤后的数组长度实现更复杂的查找


楼上说得都很对,但是数组indexOf的兼容性并不好,其实这个问题可以归结为典型的数组去重。
`//类似hash表的方法
var mArr = new Array();
var hash = new Object();
for(var i=0;i<mArr.length;i++)
{

     hash[mArr] = 1;

}
function check(a){

    if(hash[a]==1){
        return true;
    }else{
        return false;
    }

}
`
Ps: 手机敲代码好难受。。。


数组本身就有indexOf()方法(ES5)和includes()方法(ES7)。

另外,你说的那个聪明的方法是有问题的。比如有个数组:

var arr = [12, 345, 67, 890];

你用那个聪明的方法测一下数字458在不在数组中试试。


es5 就有了 数组的 indexOf 方法。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf


你好像没考虑nan


jq有一个inArray方法,你可以看一下,其他人的答案也可以的inArray

【热门文章】
【热门文章】