检查值存在于数组位置

Checking value exists in an array position

本文关键字:数组 位置 存在 于数组 检查      更新时间:2023-09-26

我有一个名为"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,2分配给data[10]的代码。1,2 的值很简单2正如您在 JavaScript shell/console 中执行以下内容所见。请参阅参考,了解逗号运算符的工作原理。

但是,您收到的错误消息表明您有字符串"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] is 1
  • valueArray[1] is 2

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

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

但是,如果您想进行会员资格检查,那么您需要使用的不是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