检查值存在于数组位置

时间:2012-06-27 02:45:37

标签: javascript

我有一个名为“data”的大型数组。

在第10个数组位置,我的数据值为:

[10] => 1,2 

现在我在JS中尝试做的事情是这样的:

 i = 1;
 if(i in data[10]){
   //great success, very nice!
 }

我认为逗号分隔的数据可能就像使用“IN”方法的数组一样,但它不起作用。我收到这个错误:

 Uncaught TypeError: Cannot use 'in' operator to search for '1' in 1,2 

什么是我的问题的正确解决方案?

1 个答案:

答案 0 :(得分:4)

您没有显示将1,2指定给data[10]的代码。 1,2的值只是2,您可以在JavaScript shell /控制台中执行以下操作。有关逗号运算符的工作原理,请参阅reference

但是,您收到的错误消息表明您有字符串"1,2"。要将其转换为数组,您应该使用split(),如下所示:

> data[10] = "1,2"
1,2
> data[10].split(',')
[ "1", "2" ]

要迭代这些值,您可以在结果数组中使用in运算符,如下所示:

var data = new Array();
data[10] = '1,2';
var valueArray = data[10].split(',');
for (var i in valueArray) {
  alert('valueArray[' + i + '] is ' + valueArray[i]);
}

您可以在浏览器控制台中运行此功能,alert会显示两条消息:

  • valueArray [0]为1
  • valueArray [1]是2

请注意,您不需要在循环开始之前初始化iin运算符会自动执行此操作。此外,最好使用局部变量,因此在上面的代码中使用var i

另外,如果您不熟悉JS,但需要处理大量的数据结构操作,那么值得学习underscore.js。请特别注意_.each()。 Underscore可以帮助您避免编写大量循环逻辑。

但是,如果您要进行会员资格检查,则需要使用in而不是Array.indexOf()。有关在评论中从jsfiddle分叉的示例,请参阅http://jsfiddle.net/nRS9m。更多例子:

> valueArray
[ "1", "2" ]
> valueArray.indexOf("3")
-1
> valueArray.indexOf("1")
0
> valueArray.indexOf("2")
1
> valueArray.indexOf(1)
-1
> valueArray.indexOf((1).toString())
0