1 回答
TA贡献2019条经验 获得超9个赞
根据您希望收藏的外观,我认为此解决方案适合您。
var data = [{
city: {
id: 3,
name: "Amaporville"
},
district: {
id: 39,
name: "Bosnia and Herzegovina District"
}
},
{
city: {
id: 3,
name: "Rathbury"
},
district: {
id: 38,
name: "Montenegro Heights"
},
},
{
city: {
id: 3,
name: "Amaporville"
},
district: {
id: 40,
name: "Mali Area"
}
}
]
function transformArr(orig) {
var newArr = [],
cities = {},
i, cur;
for (i = 0; i < orig.length; i++) {
cur = orig[i];
if (!cities[cur.city.name]) {
var obj = {}
obj['city'] = cur.city
cities[cur.city.name] = {
districts: []
};
obj['districts'] = cities[cur.city.name].districts
newArr.push(obj);
}
cities[cur.city.name].districts.push(cur.district);
}
return newArr;
}
console.log(transformArr(data))
本质上,您使用哈希图并向其中添加城市。城市名称指向一系列地区。城市对象的目的是确定您的集合是否已经包含该城市的名称。如果是这样,将当前地区添加到该项目地区。
当您组织散列映射时,您还向其添加city键obj并为其分配当前对象的城市对象的值。然后你对地区做同样的事情。最后,属于一个城市的所有地区都会出现在该城市下方,而不是之前出现两次(或者该城市在原始收藏中出现过多少次)。
添加回答
举报
