我有两个数组:
var arr1 = ["1", "2", "3"],
arr2 = ["2", "5", "8"];
确定arr1中的任何元素是否与arr2中的任何元素匹配的最佳方法是什么?
我正在使用jquery,所以现在我正在循环arr1并调用$.inArray(arr1[i], arr2);
,但我很好奇是否有更好的方法。
修改
如果有人对我的确切情况感到好奇,那么这是一个谷歌地图,我正在循环标记,以查看是否在标记存储的类型中找到任何过滤类型。如果找到任何,我会显示标记。否则它是隐藏的。 [此代码有效 - 将很快测试很多标记]
var filters = $("#map-search :checked").map(function () {
return this.value;
}).get(),
markerIndex = 0;
for (markerIndex; markerIndex < AKTA.Map.markers.length; markerIndex++) {
var marker = AKTA.Map.markers[markerIndex],
isVisible = false;
if (filters.length > 0) {
var filterIndex = 0;
for (filterIndex; filterIndex < filters.length; filterIndex++) {
if ($.inArray(filters[filterIndex], marker.types) != -1) {
isVisible = true;
break;
}
}
}
marker.setVisible(isVisible);
}
答案 0 :(得分:1)
arr1.some(function(el) {
return arr2.indexOf(el) > -1
});
MDC provides以下代码适用于未实现some
的浏览器:
if (!Array.prototype.some)
{
Array.prototype.some = function(fun /*, thisp */)
{
"use strict";
if (this === void 0 || this === null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (typeof fun !== "function")
throw new TypeError();
var thisp = arguments[1];
for (var i = 0; i < len; i++)
{
if (i in t && fun.call(thisp, t[i], i, t))
return true;
}
return false;
};
}
答案 1 :(得分:0)
对两个数组进行排序,然后使用此伪代码:
i=0;
j=0;
while(i<array1length && j<array2length) {
if (array1[i]<array2[j])
i++;
else if (array1[i]>array2[j])
j++;
else
//match!!
}
我认为,没有更快的方法可以做到这一点。
最后,如果你匹配字符串,你可以先对它们进行哈希编码,然后只匹配哈希码。