通过与另外两个阵列进行比较来过滤主阵列

时间:2013-07-09 03:46:16

标签: javascript filtering jquery-isotope

哎哟!我头疼。几个小时以来一直在研究这个问题,我的大脑正在自行折叠。

基本上,Isotope在我的页面上隐藏或显示html元素,我需要以非常有效的方式在嵌入式地图上隐藏或显示相应的Google Maps标记(许多Google Maps标记)。

所以......我有一个MASTERARRAY [],里面装满了物品。数组中的每个对象都有一个唯一的id。

即。 MASTERARRAY [I] .ID

此MASTERARRY []还有一个Google Maps标记对象。

即。 MASTERARRAY [I] .marker

当Isotope在我页面上的页面上过滤HTML元素时,我将具有唯一ID的对象推送到以下阵列之一:

  1. ISOTOPEFILTER.resultsRemovedFromPage

  2. ISOTOPEFILTER.resultsOnPageAfterFiltering

  3. 通过将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");
    }
    

1 个答案:

答案 0 :(得分: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
    }
}
相关问题