查找项目是否在JavaScript数组中的最佳方法?[副本]

这个问题在这里已经有答案了
如何在JavaScript中检查数组是否包含值?

(54个答案)

四年前关闭的

确定对象是否在数组中的最佳方法是什么

这是我知道的最好的方法:

函数包括(arr,obj){
对于(变量i=0;i<arr.length;i++){
如果(arr[i]==obj)返回true;
}
}
日志(包括([1,2,3,4],3));//符合事实的
console.log(包括([1,2,3,4],6));//未定义的

从ECMAScript 2016开始,您可以使用includes()

arr.includes(obj);

如果您想支持IE或其他旧浏览器:

功能包括(arr、obj){
返回(arr.indexOf(obj)!=-1);
}

编辑:
但这在IE6、7或8上不起作用。最好的解决方法是在不存在时自己定义它:

  1. Mozilla(ECMA-262)版本:

    if(!Array.prototype.indexOf)
    {
    Array.prototype.indexOf=函数(searchElement/*,fromIndex*/)
    {
    &“严格使用”;;
    if(this==void 0 | | this==null)
    抛出新的TypeError();
    var t=对象(本);
    var len=t.length>>0;
    如果(len==0)
    返回-1;
    var n=0;
    如果(arguments.length>0)
    {
    n=数量(参数[1]);
    如果(n!==n)
    n=0;
    否则如果(n!==0&n!==(1/0)&n!==-(1/0))
    n=(n>0 | |-1)*数学地板(数学abs(n));
    }
    如果(n>=len)
    返回-1;
    变量k=n>=0
    N
    :Math.max(len-Math.abs(n),0);
    对于(;k<len;k++)
    {
    if(t&t[k]==搜索元素中的k)
    返回k;
    }
    返回-1;
    };
    }
    
  2. 丹尼尔·詹姆斯的版本:

    if(!Array.prototype.indexOf){
    Array.prototype.indexOf=函数(obj,fromIndex){
    if(fromIndex==null){
    fromIndex=0;
    }else if(从索引<0){
    fromIndex=Math.max(0,this.length+fromIndex);
    }
    for(var i=fromIndex,j=this.length;i<j;i++){
    如果(此[i]==obj)
    返回i;
    }
    返回-1;
    };
    }
    
  3. 公鸡酸的版本:

    Array.prototype.hasObject=(
    !Array.indexOf?函数(o)
    {
    var l=此长度+1;
    而(l-=1)
    {
    如果(这个[l-1]==o)
    {
    返回true;
    }
    }
    返回false;
    }:功能(o)
    {
    return(this.indexOf(o)!=-1);
    }
    );
    

发表评论