2013-05-12 3 views
0

У меня есть запрос БД, который возвращает кучу данных на основе местоположения из моей БД. Я заканчиваю список объектов (которые я вставляю в один объект и console.log(), чтобы видеть, что внутри).Группировка объектов javascript по общему значению

Каждый объект представляет собой запись от пользователя, который содержит заметки на месте:

Он содержит: название магазина, адрес, идентификатор пользователя, заметки.

Так много людей могут посетить место и написать разные заметки. То, что я хочу сделать, - это разместить местоположения в 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] 
    }); 
} 

Так что местоположенияObjVisits ... Я не уверен, что с этим делать. Есть идеи?

ответ

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

Это как раз то, что я хочу, но проблема здесь. Он группирует массивы по адресам, но в каждом из подсетей locationObj содержатся все объекты, возвращаемые с сервера, причем они не включают только те, у которых есть соответствующий адрес ... знаете ли вы, что я имею в виду? – JamesG

+0

Упс. Я исправил проблему. –

+0

Да, это так! Спасибо друг! Не думал бы делать что-нибудь подобное, разумно элегантное решение – JamesG

Смежные вопросы