0

我有一个<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()

4

2 回答 2

1

您所要求的可以通过 PHP 的array_diff功能来解决。我知道您没有使用 PHP,但这就是array_diffPHPJS的原因,这是一个致力于将 PHP 函数移植到 JavaScript 的项目。

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

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

于 2012-06-14T14:40:21.590 回答
1

检查这个库:underscore.js

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

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

于 2012-06-14T14:45:02.857 回答