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

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

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

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

阅读 4.5k
6 个回答

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

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

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

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

你好像没考虑nan

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

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

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

楼上说得都很对,但是数组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: 手机敲代码好难受。。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题