2013-07-09 116 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