2

使用以下函数,我正在搜索数组中是否存在值;

var checkboxValues = ['large-car', 'small-car', 'automatic'];
var carType = ["large-car"];

function searchArray(arguments)
{
  var o = {};
  for(var i=0;i<arguments.length;i++)
  {
    o[arguments[i]]=null;
  }
  return o;
}

if (carType in searchArray(checkboxValues) )
    //do something...

carType(这是一个数组本身)仅包含一个值但carType包含多个值时,此条件很有效,例如,

var carType = ["large-car", "4WD"];

...然后该函数将返回 false。

为了提供一些背景知识,我想做的是根据某些条件显示或隐藏地图标记(通过谷歌地图),

  • 自动的
  • 手动的
  • 小型车
  • 大型车
  • 四驱车

这些值中的每一个都表示为一个复选框。如果选择“自动”和“小型汽车”,则仅显示包含这两个值的地图标记。

如果选择了“自动”、“小型汽车”和“大型汽车”,则仅显示与这些选择匹配的值。

如果carType数组仅包含一个值,但由于单个车辆可能具有多个类型,如上所示,则此方法有效,这就是函数失败的地方。

编写函数以允许将一个数组中的多个值与另一个数组中的多个值进行比较的最佳方法是什么?

4

5 回答 5

1

看看array_intersect来自 PHPJS的 PHParray_intersect函数在 JavaScript 中的再现。

于 2013-06-17T11:11:25.640 回答
1

摘自此答案的片段。

function arrayUnique(array) {
    var a = array.concat();
    for(var i=0; i<a.length; ++i) {
        for(var j=i+1; j<a.length; ++j) {
            if(a[i] === a[j])
                a.splice(j--, 1);
        }
    }
    return a;
};

然后像这样使用它:

var checkboxValues = ['large-car', 'small-car', 'automatic'],
    carType = ["large-car"],
    merged = arrayUnique(checkboxValues.concat(carType));
if (merged.length === checkboxValues.length) {...}

如果您需要返回两个数组的匹配元素,您可以这样做:

function matchArrays(base, toSearch) {
    var returnArray = [];
    for (var i = 0; i < toSearch.length; i++) {
        if (base.indexOf(toSearch[i]) !== -1) returnArray.push(toSearch[i]);
    }
    return returnArray;
}

用法:

var match = matchArrays(checkboxValues, carType); // return "large-car"
于 2013-06-17T11:16:34.287 回答
1

您可以使用 js 功能来匹配数组。一种方法是使用 indexOf() 函数,如果在数组中找到,则返回字符串的索引,如果未找到则返回 -1。

var checkboxValues = ["large-car", "small-car", "automatic"];
var carType = ["large-car","automatic","some car"];

function searchMatch(carType) {   
   var result =  new Array();   
   for(var i=0;i < carType.length;i++)   {
       // If match found push the match to the result array.
       if(checkboxValues.indexOf(carType[i]) != -1){
           result.push(carType[i])
       }
 
   }
return  result ;
}

结果你会得到 ["large-car","automatic"];

于 2013-06-17T11:48:39.020 回答
0

试试这个 jQuery 解决方案:

<script type="text/javascript">
    var checkboxValues = ['large-car', 'small-car', 'automatic'];
    var carType = ["large-car"];
    if ($.inArray(carType[0].toString(), checkboxValues ) == -1) {
        return false;// if not exists
    }
</script>
于 2013-06-17T11:11:37.330 回答
0

如果你使用 underscoreJs 可能看起来像这样

var checkboxValues = ['large-car', 'small-car', 'automatic'];
var carType = ['small-car','automatic'];

var result=_.any(checkboxValues,function(checkbox){
    return _.any(carType,function(carT){ return carT==checkbox;});
});
于 2017-01-29T02:51:10.133 回答