我需要确定数组中是否存在一个值。
我正在使用以下函数:
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"));
如果您可以访问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.contains = function(obj)
{
return (this.join(',')).indexOf(obj) > -1;
}
它并不完美,因为在分组之外相同的项目最终可能是匹配的。比如我的例子
var c=[];
var d=[];
function a()
{
var e = '1';
var f = '2';
c[0] = ['1','1'];
c[1] = ['2','2'];
c[2] = ['3','3'];
d[0] = [document.getElementById('g').value,document.getElementById('h').value];
document.getElementById('i').value = c.join(',');
document.getElementById('j').value = d.join(',');
document.getElementById('b').value = c.contains(d);
}
当我调用这个函数时,'g'和'h'字段分别包含1和2,它仍然能找到它,因为连接的结果字符串是:1,1,2,2,3,3
因为在我的情况下,我不确定是否会遇到这种情况,所以我使用了这个。我想我应该分享一下,以防其他人也不能做出选择的答案。
如果您可以访问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;