我想查找一个元素(可能是字符串或数字)是否在数组中。数组为test
,元素为value
。到目前为止,我有这个代码:
function compare(value, test) {
// We need to stringify all the values to compare them with a string
return test.map(function(value){
return value.toString();
}).indexOf(value) > -1;
}
alert(compare("2", [1, 2, 3]));
alert(compare("2", ["1", "2", "3"]));
It does work 即可。然而,由于indexOf()
uses strict equality不符合我的需要,它看起来很复杂。 hacky 方式将执行以下操作,这也有效:
return test.join("|").split("|").indexOf(value) > -1;
但是很容易看出,如果测试是["a", "b|c", "d"]
,那么我们就会遇到问题,因为我们要比较a
,b
,c
& d
代替a
,b|c
,d
。找不到安全字符也不是一个选项,因此该解决方案无效。 使用正常平等进行indexOf()
是否有更简单的方法?
编辑:我的第一次尝试是这样做的,它从严格的平等中意外地返回了错误,这就是为什么我以复杂的方式做到了:
["1", "2", "3"].indexOf(2);
答案 0 :(得分:1)
您可以执行以下操作吗?
function compare(value, test) {
return test.indexOf(Number(value)) > -1 ||
test.indexOf(String(value)) > -1;
}
alert(compare("2", [1, 2, 3]));
alert(compare("2", ["1", "2", "3"]));
另一种方法是使用Array.prototype.some:
function compare(value, test) {
var num = Number(value),
str = String(value);
return test.some(function(val) {
return val === num || val === str;
});
}
alert(compare("2", [1, 2, 3]));
alert(compare("2", ["1", "2", "3"]));