$.inArray 不告诉项目是不是在数组中
Posted
技术标签:
【中文标题】$.inArray 不告诉项目是不是在数组中【英文标题】:$.inArray not telling whether item is in array or not$.inArray 不告诉项目是否在数组中 【发布时间】:2021-07-05 15:27:24 【问题描述】:上下文
我有一个数组,其中包含网页上一些元素的索引。另一个数组包含元素可能具有的所有可能索引。我想遍历可能的索引数组,并根据页面上存在的索引检查每个值,以查看页面上可能存在的任何索引是否不在页面上。我以这种方式在页面上找到索引:
var indices = $(".inputValue").map(function()
return $(this).attr("value");
).get();
当我console.log(indices)
时,这给了我这个结果:
["0", "2", "3"]
我要检查的可能索引数组如下:
var potentialIndices = [0, 1, 2, 3];
然后我想获取potentialIndices
中的每个值并将其与indices
进行比较。在这种情况下,potentialIndices
包含数字 1,而 indices
没有。
问题
我想表明数字 1 在 potentialIndices
而不是 indices
。我决定使用$.inArray
和forEach
循环来遍历potentialIndices
数组中的每个项目。这是我使用的代码:
potentialIndices.forEach(function(item, index)
if ($.inArray(potentialIndices, indices) > -1)
console.log("in array");
else
console.log("not in array");
);
当我运行此代码时,我在控制台中得到了 4 次 not in array
。结果应该是“不在数组中”记录 1 次和“在数组中”记录 3 次。代码有问题吗?
我尝试过的事情
我已经尝试使用potentialIndices
字符串而不是整数 (["0", "1", "2", "3"]
),这并没有改变结果。
我还使用了for
循环来尝试获得不同的结果:
for (var i = 0; i < potentialIndices.length; i++)
if ($.inArray(potentialIndices[i], indices) > -1)
console.log("in array");
else
console.log("not in array");
但我得到了相同的结果。
【问题讨论】:
【参考方案1】:您也可以使用.filter
进行测试,或者实际上只需使用.forEach()
:
const tarr=["0", "2", "3"], parr = [0, 1, 2, 3];
parr.filter(v=>tarr.indexOf(""+v)<0 && console.log(v+" is not in tarr."));
parr.forEach(v=>tarr.indexOf(""+v)<0 && console.log(v+" is not in tarr."));
为了在tarr
中找到parr
的元素,首先需要将其与空字符串(""+v
) 连接起来,将其转换为字符串。
【讨论】:
显然这只是数据类型的问题。在indices
数组上使用parseInt()
为我解决了这个问题。但是,这种反应也很有效。我会记住它以供将来参考。谢谢!
其实,再看一遍之后,这个解决方案就行了。但是,我在indices
数组上使用了parseInt()
并取出了字符串转换,将v 留在indexOf()
方法中。以上是关于$.inArray 不告诉项目是不是在数组中的主要内容,如果未能解决你的问题,请参考以下文章