2013-05-12 93 views
0

我有一個數據庫查詢,它從我的數據庫返回一堆基於位置的數據。我最終得到了一個對象列表(我把它放在一個單一的對象和console.log()它看到裏面什麼)。通過共同價值對javascript對象進行分組

每個對象表示從含有上的位置的註釋的用戶的條目:

它包含:存儲姓名,地址,用戶ID,註釋。

很多人都可以訪問這個位置並寫出不同的註釋。我想要做的是將位置放在Google Map(JS API)上,並按位置放置一組,這樣當點擊標記時,它會包含該位置的所有註釋。

所以,我想到了分組地址返回的對象,然後爲每個地址,繪製標記和循環。

for (var i = 0; i < rowCountVisits; i++) { 
    var storelatlng = new google.maps.LatLng(
    parseFloat(result[2].latVisit[i]), 
    parseFloat(result[2].lngVisit[i])); 
    locationsObjVisits.push({ 
     storelatlng: storelatlng, 
     vName: result[2].vName[i], 
     address: result[2].locationVisit[i], 
     date: result[2].dateVisit[i], 
     notes: result[2].notes[i], 
     usersName: result[2].user.thisName[i], 
     thisColour: result[2].user.thisColour[i] 
    }); 
} 

所以locationsObjVisits ...我不知道該怎麼做。有任何想法嗎?

回答

2

我會將locationsObjVisits存儲在具有數組屬性的對象中,並使用地址作爲鍵。所以:

var locationsObjs = {}; 

for (var i = 0; i < rowCountVisits; i++) { 
    var storelatlng = new google.maps.LatLng(
    parseFloat(result[2].latVisit[i]), 
    parseFloat(result[2].lngVisit[i])); 
    var address = result[2].locationVisit[i]; 

    locationsObjs[address] = locationsObjs[address] || []; 
    locationObjs[address].push({ 
     storelatlng: storelatlng, 
     vName: result[2].vName[i], 
     address: address, 
     date: result[2].dateVisit[i], 
     notes: result[2].notes[i], 
     usersName: result[2].user.thisName[i], 
     thisColour: result[2].user.thisColour[i] 
    }); 
} 

現在,你必須通過地址分組的所有對象,你可以在一個陣列使用的地址作爲重點從對象檢索。您還可以循環訪問locationsObjs對象的鍵以獲取唯一的地址列表。所以:

for(var address in locationsObjs) 
    if(locationsObjs.hasOwnProperty(address)) 
     // Plot marker using the address. 
+0

這正是我所追求的,但是有一點問題。它按地址對數組進行分組,但每個locationsObj的子數組都包含從服務器返回的每個對象,其中不包括僅具有匹配地址的對象......你知道我的意思嗎? – JamesG 2013-05-12 14:13:27

+0

糟糕。我解決了這個問題。 – 2013-05-12 14:20:46

+0

是的多數民衆贊成在!謝了哥們!沒有想到做這樣的事情,真是優雅的解決方案 – JamesG 2013-05-12 14:24:06

相關問題