使用以下函数,我正在搜索一个数组,以确定值的存在性;
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"];
...then函数将返回false。
为了给出一些背景,我想要做的是根据一定的条件显示或隐藏地图标记(通过谷歌地图),
这些值中的每一个都表示为复选框。如果选择“自动”和“小车”,则只显示包含这两个值的地图标记。
如果选择“自动”、“小车”和“大车”,则只显示与这些选择相匹配的值。
如果carType
数组只包含一个值,但由于单个车辆可能有多个类型,如上面所示,这是函数失败的地方,这是可行的。
编写函数以便将一个数组中的多个值与另一个数组中的多个值进行比较的最佳方法是什么?
发布于 2013-06-17 11:16:34
摘自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"
发布于 2013-06-17 11:11:25
看看 from PHPJS,一个在JavaScript中复制PHP的array_intersect
函数。
发布于 2013-06-17 11:48:39
您可以使用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 ;
}
因此,你会得到“大车”,“自动”;
https://stackoverflow.com/questions/17146029
复制相似问题