我需要确定数组中是否存在一个值。
我正在使用以下函数:
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"));
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;
};
}
使用像lodash这样的库几乎总是更安全,因为存在跨浏览器兼容性和效率方面的所有问题。
效率,因为你可以保证在任何给定的时间,一个非常流行的库,如下划线,将有最有效的方法来完成这样的效用函数。
_.includes([1, 2, 3], 3); // returns true
如果你担心通过包含整个库而添加到应用程序中的大量内容,那么你可以单独包含功能:
var includes = require('lodash/collections/includes');
注意:在旧版本的lodash中,这是_.contains()而不是_.includes()。