检查值存在于数组位置
Checking value exists in an array position
我有一个名为"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
请注意,在循环开始之前,您无需初始化i
。in
运算符将自动执行此操作。此外,最好使用局部变量,因此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
相关文章:
- 如何从某个位置顺时针和逆时针循环数组
- 将javascript数组中的项移动到特定位置的有效方法
- 生成ACF标记位置的数组(元素列表后缺少])
- 基于javascript中位置的数组差异
- Javascript删除数组中某个位置之后的项
- 在数组中迭代时的JS循环位置
- 在两个位置显示数组中的随机单词
- javascript递归,按数组位置查找子级
- 检查数组位置是否真的未定义
- 检查值存在于数组位置
- 在数组位置获取并设置cookie值
- 如何访问成员模板中的数组位置
- 递增数组位置
- 返回最低数字的数组位置(非负数)
- 我如何使一个按钮改变Javascript数组位置
- 我如何保存字符串的每个字母在不同的数组位置?并合并回单个字符串
- 下划线-比较两个对象数组(位置)
- for循环中的Ajax不会返回数组位置的正确值,尽管闭包绑定了当前值位置的范围
- 根据对象在Firebase中的数组位置检索对象
- 当使用x作为索引号时.要在函数中显示数组位置,数组返回undefined