使用以下函数,我正在搜索数组中是否存在值;
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/