我需要确定数组中是否存在一个值。

我正在使用以下函数:

Array.prototype.contains = function(obj) {
    var i = this.length;
    while (i--) {
        if (this[i] == obj) {
            return true;
        }
    }
    return false;
}

上面的函数总是返回false。

数组值和函数调用如下所示:

arrValues = ["Sam","Great", "Sample", "High"]
alert(arrValues.contains("Sam"));

当前回答

使用像lodash这样的库几乎总是更安全,因为存在跨浏览器兼容性和效率方面的所有问题。

效率,因为你可以保证在任何给定的时间,一个非常流行的库,如下划线,将有最有效的方法来完成这样的效用函数。

_.includes([1, 2, 3], 3); // returns true

如果你担心通过包含整个库而添加到应用程序中的大量内容,那么你可以单独包含功能:

var includes = require('lodash/collections/includes');

注意:在旧版本的lodash中,这是_.contains()而不是_.includes()。

其他回答

给定IE的indexOf实现(由eyelidlessness描述):

Array.prototype.contains = function(obj) {
    return this.indexOf(obj) > -1;
};
function setFound(){   
 var l = arr.length, textBox1 = document.getElementById("text1");
    for(var i=0; i<l;i++)
    {
     if(arr[i]==searchele){
      textBox1 .value = "Found";
      return;
     }
    }
    textBox1 .value = "Not Found";
return;
}

这个程序检查是否找到给定的元素。Id Text1表示文本框的id, searchele表示要的元素 搜索(得到fron user);如果需要索引,请使用I值

哇,这个问题有很多很好的答案。

我没有看到一个采用减法的方法,所以我将添加它:

var searchForValue = 'pig';

var valueIsInArray = ['horse', 'cat', 'dog'].reduce(function(previous, current){
    return previous || searchForValue === current ? true : false;
}, false);

console.log('The value "' + searchForValue + '" is in the array: ' + valueIsInArray);

这是它的演奏。

使用像lodash这样的库几乎总是更安全,因为存在跨浏览器兼容性和效率方面的所有问题。

效率,因为你可以保证在任何给定的时间,一个非常流行的库,如下划线,将有最有效的方法来完成这样的效用函数。

_.includes([1, 2, 3], 3); // returns true

如果你担心通过包含整个库而添加到应用程序中的大量内容,那么你可以单独包含功能:

var includes = require('lodash/collections/includes');

注意:在旧版本的lodash中,这是_.contains()而不是_.includes()。

使用数组.map函数对数组中的每个值执行一个函数对我来说似乎是最干净的。

裁判:Array.prototype.map ()

此方法既适用于简单数组,也适用于需要查看对象数组中是否存在键/值的对象数组。

function inArray(myArray,myValue){
    var inArray = false;
    myArray.map(function(key){
        if (key === myValue){
            inArray=true;
        }
    });
    return inArray;
};

var anArray = [2,4,6,8]
console.log(inArray(anArray, 8)); // returns true
console.log(inArray(anArray, 1)); // returns false

function inArrayOfObjects(myArray,myValue,objElement){
    var inArray = false;
    myArray.map(function(arrayObj){
        if (arrayObj[objElement] === myValue) {
            inArray=true;
        }
    });
    return inArray;
};

var objArray = [{id:4,value:'foo'},{id:5,value:'bar'}]
console.log(inArrayOfObjects(objArray, 4, 'id')); // returns true
console.log(inArrayOfObjects(objArray, 'bar', 'value')); // returns true
console.log(inArrayOfObjects(objArray, 1, 'id')); // returns false