将数组的任何元素与另一个数组匹配

时间:2013-06-17 11:07:15

标签: javascript

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

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。

为了给出一些背景知识,我要做的是根据特定条件显示或隐藏地图标记(通过谷歌地图),

  • 自动
  • 手册
  • 小型车
  • 大型车
  • 4WD

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

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

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

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

5 个答案:

答案 0 :(得分:1)

查看array_intersect from PHPJS,这是JavaScript中PHP array_intersect函数的再现。

答案 1 :(得分:1)

摘自this answer

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"

答案 2 :(得分: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 ;
}

结果你会得到[“大车”,“自动”];

答案 3 :(得分: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>

答案 4 :(得分: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;});
});