我需要确定数组中是否存在一个值。
我正在使用以下函数:
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"));
你可以使用_。方法,或者如果你不想在你的应用程序中包含整个Underscore.js库,你可以看看他们是如何做的,并提取必要的代码。
_.indexOf = function(array, item, isSorted) {
if (array == null) return -1;
var i = 0, l = array.length;
if (isSorted) {
if (typeof isSorted == 'number') {
i = (isSorted < 0 ? Math.max(0, l + isSorted) : isSorted);
} else {
i = _.sortedIndex(array, item);
return array[i] === item ? i : -1;
}
}
if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item, isSorted);
for (; i < l; i++) if (array[i] === item) return i;
return -1;
};
如果您可以访问ECMA 5,您可以使用some方法。
MDN SOME方法链接
arrValues = ["Sam","Great", "Sample", "High"];
function namePresent(name){
return name === this.toString();
}
// Note:
// namePresent requires .toString() method to coerce primitive value
// i.e. String {0: "S", 1: "a", 2: "m", length: 3, [[PrimitiveValue]]: "Sam"}
// into
// "Sam"
arrValues.some(namePresent, 'Sam');
=> true;
如果您可以访问ECMA 6,则可以使用includes方法。
MDN包含方法链接
arrValues = ["Sam","Great", "Sample", "High"];
arrValues.includes('Sam');
=> true;
Array.prototype.includes ()
在ES2016中,有Array.prototype.includes()。
includes()方法确定数组是否包含某个元素,根据需要返回true或false。
例子
["Sam", "Great", "Sample", "High"].includes("Sam"); // true
支持
根据kangax和MDN,支持以下平台:
Chrome 47
边缘14
Firefox 43
歌剧34
Safari 9
节点6
支持可以使用Babel(使用Babel -polyfill)或core-js扩展。MDN还提供了polyfill:
if (![].includes) {
Array.prototype.includes = function(searchElement /*, fromIndex*/ ) {
'use strict';
var O = Object(this);
var len = parseInt(O.length) || 0;
if (len === 0) {
return false;
}
var n = parseInt(arguments[1]) || 0;
var k;
if (n >= 0) {
k = n;
} else {
k = len + n;
if (k < 0) {k = 0;}
}
var currentElement;
while (k < len) {
currentElement = O[k];
if (searchElement === currentElement ||
(searchElement !== searchElement && currentElement !== currentElement)) {
return true;
}
k++;
}
return false;
};
}