2011-03-18 101 views
1

发现我有两个数组:的Javascript:检查是否从数组中的元素在另一个数组

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

出完整的:inArray](https://github.com/jquery/jquery/blob/1.5 .1/src/core.js#L663)在core.js中的1.5.1。 – Paolo 2011-03-18 19:48:34

+0

我假设你只是显示来自内核的代码,因为这是在1.2版本中添加的。 – ScottE 2011-03-18 19:56:04

+0

[of](http://api.jquery.com/jQuery.inArray)[course](http://api.jquery.com/category/version/1.2/)! ;) – Paolo 2011-03-18 20:00:21

回答

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; 
    }; 
} 
+0

虽然这需要原型,不是吗? – ScottE 2011-03-18 19:18:16

+0

@ScottE - 它在Firefox中可用。这可能不是在其他浏览器中,但你可以在这里看到一个实现:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some – 2011-03-18 19:19:27

+0

@Scott'some'是EcmaScript中新增的一种Array方法5.它在IE9中实现,但不是早期版本的IE。 – 2011-03-18 19:19:39

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

我想,有这样做没有更快的方法。

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

相关问题