javascript - 将数组的任意元素与另一个数组进行匹配

标签 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。

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

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

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

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

如果 carType 数组仅包含单个值,则此方法有效,但由于单个车辆可能具有以上所示的多种类型,因此该函数会失败。

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

最佳答案

摘自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"

关于javascript - 将数组的任意元素与另一个数组进行匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17146029/

相关文章:

javascript - 无法使用 AWS-sdk 连接到 AWS EC2

javascript - 如何从浏览器控制台禁用 JavaScript 函数调用?

javascript - Jquery可视化图表没有显示

javascript - 刷新 owlCarousel 2 宽度

javascript - 检测浏览器缩放级别

javascript - 在 Three.js 中从 3 个顶点渲染平面

javascript - Bcryptjs无法比较密码Nodejs

javascript - 定位父元素以使其子元素在屏幕上居中

javascript - 需要将以下css转成jquery

javascript - 从分隔字符串中读取数据以创建选择元素