記一個(gè)面試題

題目

假設(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í)+亂序,需要加遞歸

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容