我有一个带有以下格式的几个对象的JSON:
[{
"id":14,
"friendlyName":"NameOfPlace 1",
"lat":30.402735,
"lon":-90,
"address":"1 place street",
"city":"NYC",
"state":"NY",
"zipCode":"12346",
"locationCode":"MQ00003",
"details":"in the bank"
},
{
"id":15,
"friendlyName":"NameOfPlace 2",
"lat":30.402735,
"lon":-90,
"address":"1 place street",
"city":"NYC",
"state":"NY",
"zipCode":"12346",
"locationCode":"MQ00003",
"details":"near ATM"
}]
他们是商店的位置。我在列表中有几个这样的。如果同一建筑物内有2个位置,则其中一些名称如名称1和名称2。我试图找到一种方法将它们组合成一个具有两个值但只有一个位置的对象(在示例的情况下为“Name”)。我有两个问题,如果我有上面的对象列表,我可以按字母顺序排序friendlyName
,然后检查是否有类似的命名位置可以组合成一个对象。请注意,这些位置将具有相同的纬度和地址,只是不同的细节和ID。我只能弄清楚它是如何线性地运行的,而且对于我正在尝试的移动应用来说它非常慢。
答案 0 :(得分:2)
您可以使用哈希表对友好名称进行分组,并生成包含数据的新数组。如果数据不同,则所有值都包含在数组中。
var data = [{ "id": 14, "friendlyName": "NameOfPlace 1", "lat": 30.402735, "lon": -90, "address": "1 place street", "city": "NYC", "state": "NY", "zipCode": "12346", "locationCode": "MQ00003", "details": "in the bank" }, { "id": 15, "friendlyName": "NameOfPlace 2", "lat": 30.402735, "lon": -90, "address": "1 place street", "city": "NYC", "state": "NY", "zipCode": "12346", "locationCode": "MQ00003", "details": "near ATM" }],
grouped = [];
data.forEach(function (o) {
var key = o.friendlyName.split(/(?= \d*$)/)[0];
if (!this[key]) {
this[key] = { Name: key };
grouped.push(this[key]);
}
Object.keys(o).forEach(function (k) {
if (!(k in this[key])) {
this[key][k] = o[k];
return;
}
if (this[key][k] === o[k]) {
return true;
}
if (Array.isArray(this[key][k])) {
this[key][k].push(o[k]);
return;
}
this[key][k] = [this[key][k], o[k]];
}, this);
}, Object.create(null));
console.log(grouped);
答案 1 :(得分:1)