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并為其分配當前對象的城市對象的值。然后你對地區做同樣的事情。最后,屬于一個城市的所有地區都會出現在該城市下方,而不是之前出現兩次(或者該城市在原始收藏中出現過多少次)。
添加回答
舉報
