2011-03-18 113 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!! 
} 

我想,有這樣做沒有更快的方法。

最終,如果你匹配字符串,你可以先對它們進行哈希碼編碼,然後只匹配哈希碼。

相關問題