如何在x.indexOf(y)中使用类型强制?

时间:2014-04-04 20:21:24

标签: javascript

我有一组数字,但我不确定它们是否会被格式化为整数或字符串。所有都是有效的整数,所以我最终会得到类似的结果:

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

4 个答案:

答案 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

FIDDLE