如何使用jQuery.inArray()检查是否在另一个数组中找到了一个字符串元素数组?

时间:2012-06-14 14:26:08

标签: javascript jquery google-maps google-maps-api-3

我有一个包含选项的<SELECT multiple="multiple">框。

我将所选选项存储在 JS 变量 - selectedFeatures中。

我想将selectedFeatures选项的数组变量传递给jQuery.inArray() - 但该函数仅用于获取和检查一个值。

如果我实际指定了如下所示元素的索引,我可以在地图上显示/隐藏(或过滤)标记:selectedFeatures[0]内的inArray()

..但由于我可以从选择框中选择多个选项,因此这种过滤方法不起作用。

如何使用 JS / jQuery 检查另一个数组中的项目数组?

// store selected options as an array of string elements inside the variable
var selectedFeatures = $("#features").val();
// for every element inside 'markers.houses' array...                   
$(markers.houses).each(function(index, elem){
    // check if any of the values inside the 'selectedFeatures' array are found
    // also inside a sub-array 'features' inside every element of 'markers.houses'
    // array. if 'true' show that particular marker, otherwise hide the marker
    if(jQuery.inArray(selectedFeatures, elem.features) !== -1 || jQuery.inArray(selectedFeatures, elem.features) > -1){
        markers.houseMarkers[index].setVisible(true);
    }else{
        markers.houseMarkers[index].setVisible(false);
    }
});
  

图1.1 - 将选定的选项存储在数组变量中并与 jQuery.inArray()一起使用

2 个答案:

答案 0 :(得分:1)

您要求的内容可以通过PHP的array_diff函数解决。我知道你没有使用PHP,但这就是array_diff on PHPJS的原因,这个项目致力于将PHP函数移植到JavaScript中。

无论如何,要解决此问题,您基本上想要致电array_diff(selectedFeatures,elem.features).length == 0。 (您可能需要交换参数,我不确定哪个数组是您的问题中的哪一个)

array_diff返回第一个数组中不存在的元素。如果第一个数组中的所有元素也在第二个数组中(即array1是array2的子集),则返回的数组将为空,因此其长度为零。

答案 1 :(得分:1)

检查此库:underscore.js

你可以使用_.difference(array,* others)。

或者您可以创建自己的函数来检查来自一个数组的值是否在另一个数组中。