2013-07-09 118 views
0

ouch!我頭疼。一直在這個問題上工作幾個小時,我的大腦正在摺疊自己。通過與另外兩個陣列進行比較來過濾主陣列

基本上,同位素隱藏或顯示我的網頁上的html元素,我需要以非常有效的方式(大量Google地圖標記)在嵌入式地圖上隱藏或顯示相應的Google地圖標記。

所以...我有一個MASTERARRAY []充滿了對象。數組中的每個對象都有一個唯一的ID。

即MASTERARRAY [I] .ID

這MASTERARRY []也有一個谷歌地圖標記對象相關聯。

即MASTERARRAY [I] .marker

當同位素過濾我的網頁上我的頁面上的HTML元素,我推以該唯一ID的對象到以下陣列之一:

  1. ISOTOPEFILTER.resultsRemovedFromPage

  2. ISOTOPEFILTER.resultsOnPageAfterFiltering

下面的代碼將通過比較MASTERARRAY和ISOTOPEFILTER.resultsRemovedFromPage成功刪除我地圖上的標記。但是,我不知道如何高效地使用此功能還顯示ISOTOPEFILTER.resultsOnPageAfterFiltering數組中存在ID的Google Map標記。

function updateMap() { 
    var hiddenMarkerCount = 0; 

    for (i in ISOTOPEFILTER.resultsRemovedFromPage) { 


      for (var j=0; j<MASTERARRAY.length; j++) { 

      if (ISOTOPEFILTER.resultsRemovedFromPage[i].id == MASTERARRAY[j].id){ 
       hiddenMarkerCount++; 
       MASTERARRAY[j].marker.setMap(null); 
       break; 
      } 
     } 
    } 

    console.log("We have hidden"+hiddenMarkerCount+" markers"); 
} 
+2

我只是輸入'MASTERARRAY []',以確保它在評論爲好,這樣每個人都可以看到,它實際上是大寫的,而這就是所謂的'MASTERARRAY []'! – adeneo

回答

0

不是將刪除和包含的對象存儲在一個數組中,而是將它們存儲在一個鍵入ID的對象中。然後,你可以這樣做:

for (var j = 0; j < MASTERARRAY.length; j++) { 
    if (ISOTOPEFILTER.resultsRemovedFromPage[MASTERARRAY[j].id]) { 
     // Do stuff for removed items 
    } 
    if (ISOTOPFILTER.resultsOnPageAfterFiltering[MASTERARRAY[j].id]) { 
     // Do stuff for included items 
    } 
} 
+0

謝謝!雖然這種技術需要相當多的時間來重新工作原始代碼,但最終的結果是快速實現,一旦我的對象被設置,實現起來非常簡單。非常感激! – That1guyoverthr