題目
假設(shè)后端同學(xué)通過接口向前端返回了天貓的行業(yè)信息,例如:
industry_list = [
{
"parent_ind" : "女裝",
"name" : "連衣裙"
},
{
"name": "女裝"
},
{
"parent_ind" : "女裝",
"name" : "半身裙"
},
{
"parent_ind" : "女裝",
"name" : "A字裙"
},
{
"name": "數(shù)碼"
},
{
"parent_ind" : "數(shù)碼",
"name": "電腦配件"
},
{
"parent_ind" : "電腦配件",
"name": "內(nèi)存"
},
]
為了取用方便,我們希望可以將其轉(zhuǎn)換為樹狀格式,例如:
{
"數(shù)碼": {
"電腦配件": {
"內(nèi)存" : {}
}
},
"女裝" : {
"連衣裙": {},
"半身裙": {},
"A字裙": {}
}
}
實(shí)現(xiàn)一個(gè)方法完成這個(gè)轉(zhuǎn)換
function convert_format(data)
解法
function convert_format(data) {
let itemArr = [], // 存儲(chǔ)加載過的name
itemKeys = {}, // 記錄加載過的那么的層級(jí)關(guān)系
obj = {} // 目標(biāo)數(shù)據(jù)
data.map(item => {
if (item.parent_ind) {
// 記錄當(dāng)前name
itemArr.push(item.name)
// 已加載過的name
if (itemArr.indexOf(item.parent_ind) > -1) {
let keysArr = itemKeys[item.parent_ind], // 對(duì)象層級(jí)
value = obj // 對(duì)應(yīng)值
keysArr.map((key, index) => {
value = value[key]
})
value[item.parent_ind][item.name] = {}
// name的層級(jí)就是name父級(jí)層級(jí)+父級(jí)
itemKeys[item.name] = [...itemKeys[item.parent_ind], item.parent_ind]
} else {
itemArr.push(item.parent_ind)
itemKeys[item.parent_ind] = []
itemKeys[item.name] = [item.parent_ind]
obj[item.parent_ind] = {}
obj[item.parent_ind][item.name] = {}
}
}
})
return obj
}
問題:如果無限級(jí)+亂序,需要加遞歸