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

我正在使用以下函数:

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

当前回答

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

Array.prototype.contains = function(obj) {
    return this.indexOf(obj) > -1;
};

其他回答

另一种选择是使用Array。部分(如有)采用以下方式:

Array.prototype.contains = function(obj) {
  return this.some( function(e){ return e === obj } );
}

传递给Array的匿名函数。当且仅当数组中存在与obj相同的元素时,一些函数将返回true。如果没有这样的元素,则该函数对于数组的任何元素都不会返回true,因此array .数组将返回true。有些也会返回false。

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

Array.prototype.contains = function(obj) {
    return this.indexOf(obj) > -1;
};

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

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

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

这是它的演奏。

jQuery有一个实用函数:

$.inArray(value, array)

返回数组中值的索引。如果数组不包含值,则返回-1。

另参见如何检查数组中是否包含JavaScript对象?

我更喜欢简单:

var days = [1, 2, 3, 4, 5];
if ( 2 in days ) {console.log('weekday');}