Javascript:检查是否在另一个数组中找到了数组中的元素

时间:2011-03-18 18:57:12

标签: javascript jquery arrays

我有两个数组:

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);

}

2 个答案:

答案 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!!
}

我认为,没有更快的方法可以做到这一点。

最后,如果你匹配字符串,你可以先对它们进行哈希编码,然后只匹配哈希码。