首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将数组的任何元素与另一个数组匹配

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

Stack Overflow用户
提问于 2013-06-17 11:07:14
回答 5查看 4.3K关注 0票数 2

使用以下函数,我正在搜索一个数组,以确定值的存在性;

代码语言: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包含多个值(例如,

代码语言:javascript
运行
复制
var carType = ["large-car", "4WD"];

...then函数将返回false。

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

  • 自动
  • 手册
  • 小车
  • 大型轿车
  • 四轮驱动

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

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

如果carType数组只包含一个值,但由于单个车辆可能有多个类型,如上面所示,这是函数失败的地方,这是可行的。

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-06-17 11:16:34

摘自this answer的片段。

代码语言:javascript
运行
复制
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;
};

然后像这样使用它:

代码语言:javascript
运行
复制
var checkboxValues = ['large-car', 'small-car', 'automatic'],
    carType = ["large-car"],
    merged = arrayUnique(checkboxValues.concat(carType));
if (merged.length === checkboxValues.length) {...}

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

代码语言:javascript
运行
复制
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;
}

用法:

代码语言:javascript
运行
复制
var match = matchArrays(checkboxValues, carType); // return "large-car"
票数 1
EN

Stack Overflow用户

发布于 2013-06-17 11:11:25

看看 from PHPJS,一个在JavaScript中复制PHP的array_intersect函数。

票数 1
EN

Stack Overflow用户

发布于 2013-06-17 11:48:39

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

代码语言:javascript
运行
复制
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 ;
}

因此,你会得到“大车”,“自动”;

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17146029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档