1

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

在第 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 

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

4

1 回答 1

4

您没有显示分配1,2data[10]. 的值1,2很简单2,正如您在 JavaScript 外壳/控制台中执行以下命令所看到的那样。有关逗号运算符的工作原理,请参阅参考资料

但是,您收到的错误消息表明您有 string "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

请注意,您不需要i在循环开始之前进行初始化。操作员将自动执行此in操作。此外,使用局部变量是一种很好的做法,因此var i在上面的代码中。

附带说明一下,如果您是 JS 新手,但需要处理大量数据结构操作,那么值得学习underscore.js。特地来看看_.each()。下划线可以使您免于编写大量循环逻辑。

但是,如果您想进行成员资格检查,则需要使用 not inbut Array.indexOf()。请参阅 http://jsfiddle.net/nRS9m以获取评论中从您的 jsfiddle 分叉的示例。更多示例:

> valueArray
[ "1", "2" ]
> valueArray.indexOf("3")
-1
> valueArray.indexOf("1")
0
> valueArray.indexOf("2")
1
> valueArray.indexOf(1)
-1
> valueArray.indexOf((1).toString())
0
于 2012-06-27T02:54:26.470 回答