找出JavaScript数组是否包含值的最简洁有效的方法是什么?

这是我知道的唯一方法:

function contains(a, obj) {
    for (var i = 0; i < a.length; i++) {
        if (a[i] === obj) {
            return true;
        }
    }
    return false;
}

有没有更好、更简洁的方法来实现这一点?

这与堆栈溢出问题密切相关。在JavaScript数组中查找项目的最佳方法是什么?它解决了使用indexOf查找数组中的对象的问题。


当前回答

使用idnexOf()是一个很好的解决方案,但您应该隐藏嵌入的实现indexOf(()函数,该函数使用~运算符返回-1:

function include(arr,obj) { 
    return !!(~arr.indexOf(obj)); 
} 

其他回答

函数countArray(originalArray){var压缩=[];//复制输入数组var copyArray=originalArray.slice(0);//第一个循环遍历每个元素for(var i=0;i<originalArray.length;i++){变量计数=0; //在副本中的每个元素上循环,看看是否相同for(var w=0;w<copyArray.length;w++){if(originalArray[i]==copyArray[w]){//增加发现重复的次数计数++;//将项设置为未定义delete copyArray[w];}}如果(计数>0){var a=新对象();a.value=原始数组[i];a.count=计数;按压(a);}}返回压缩;};//应该是这样的:var testArray=新数组(“狗”、“狗”,“猫”,“水牛”,“狼”、“猫”、“老虎”、“猫咪”);var newArray=countArray(testArray);console.log(newArray);

Use:

function isInArray(array, search)
{
    return array.indexOf(search) >= 0;
}

// Usage
if(isInArray(my_array, "my_value"))
{
    //...
}

或此解决方案:

Array.prototype.includes = function (object) {
  return !!+~this.indexOf(object);
};

它有一个参数:对象的数组数。数组中的每个对象都有两个由x和y表示的整数财产。该函数必须返回数组中满足numbers.x==numbers.y的所有此类对象的计数

var数=〔{x:1,y:1},{x:2,y:3},{x:3,y:3},{x:3,y:4},{x:4,y:5}];变量计数=0;var n=数字长度;对于(变量i=0;i<n;i++){如果(数字[i].x==数字[i].y){count+=1;}}警报(计数);

如果你使用的是JavaScript 1.6或更高版本(Firefox 1.5或更高),你可以使用Array.indexOf。