我有一个名为“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
什么是我的问题的正确解决方案?
答案 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
会显示两条消息:
请注意,您不需要在循环开始之前初始化i
。 in
运算符会自动执行此操作。此外,最好使用局部变量,因此在上面的代码中使用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