我有一个数据库查询,它从我的数据库返回一堆基于位置的数据。我最终得到了一个对象列表(我把它放在一个对象和console.log()中,看看里面是什么)。
每个对象代表一个用户的条目,其中包含有关该位置的注释:
它包含:商店名称,地址,用户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 ......我不知道该如何处理。有什么想法吗?
答案 0 :(得分: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.