$.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。我决定使用$.inArrayforEach 循环来遍历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 不告诉项目是不是在数组中的主要内容,如果未能解决你的问题,请参考以下文章

Jquery遍历数组之$.inArray()方法介绍

JS中如何判断数组中是不是包含某一元素

js中如何判断数组中是不是含有某一项

JQuery判断数组中是否包含某个元素$.inArray("元素字符串", 数组名称);

js怎么从数组中删除指定值(不是指定位置)的元素?

用 inArray 查找数组中的对象