我有一组数字,但我不确定它们是否会被格式化为整数或字符串。所有都是有效的整数,所以我最终会得到类似的结果:
X = [1, 2, 3, 4, 5];
或
X = ['1', '2', '3', '4', '5'];
我想使用indexOf检查并查看另一个变量,我不确定是否将格式化为字符串或整数,是否包含在X中?
我知道我可以使用像X.indexOf(+y)
这样的东西来强制y
(我想要比较的变量)成一个数字,并且我可以分段并转换{{1中的每个项目使用X
的数字,但有没有办法允许像map
那样的javascript标准类型强制? (即在[{1}}中处理比较,例如indexOf
而不是indexOf
)
答案 0 :(得分:2)
如果您不想获取索引值并且只是在数组中,您可以使用filter并传入可选的this参数。根据返回数组的长度(大于零),您将知道它是否在数组中。如果您想要索引,最好将数组和搜索值转换为相同类型。
X.filter(function(el){
return parseInt(el,10) === parseInt(this,10)
},y).length
答案 1 :(得分:1)
function doesItContain( arr, textOrInt) {
return (arr.indexOf(textOrInt) != -1) ||
(arr.indexOf(parseInt(textOrInt)) != -1) ||
(arr.indexOf(textOrInt.toString()) != -1);
}
答案 2 :(得分:1)
我只会编写您自己的indexOf
方法,可能称为looseIndexOf
或其他内容:
function looseIndexOf(arr, value) {
for (var i = 0; i < arr.length; ++i) {
if (arr[i] == value) {
return i;
}
}
return -1;
}
默认JavaScript值比较w / ==
。很简单。
looseIndexOf([1,2,3], '2'); // => 1
looseIndexOf(['1','2','3'], 2); // => 1
looseIndexOf([1, 2], true); // => 0
looseIndexOf([1,2,3], 4); // => -1
答案 3 :(得分:1)
如果您不需要索引,只是为了检查某个值是否存在,您可以使用Array.some
方法
x.some(function(z) {return z == y}); // true or false