记一个面试题

题目

假设后端同学通过接口向前端返回了天猫的行业信息,例如:
industry_list = [
{
"parent_ind" : "女装",
"name" : "连衣裙"
},
{
"name": "女装"
},
{
"parent_ind" : "女装",
"name" : "半身裙"
},
{
"parent_ind" : "女装",
"name" : "A字裙"
},
{
"name": "数码"
},
{
"parent_ind" : "数码",
"name": "电脑配件"
},
{
"parent_ind" : "电脑配件",
"name": "内存"
},
]

为了取用方便,我们希望可以将其转换为树状格式,例如:
{
"数码": {
"电脑配件": {
"内存" : {}
}
},
"女装" : {
"连衣裙": {},
"半身裙": {},
"A字裙": {}
}
}
实现一个方法完成这个转换
function convert_format(data)

解法

function convert_format(data) {
      let itemArr = [], // 存储加载过的name
        itemKeys = {}, // 记录加载过的那么的层级关系
        obj = {} // 目标数据
      data.map(item => {
        if (item.parent_ind) {
          // 记录当前name
          itemArr.push(item.name)
          // 已加载过的name
          if (itemArr.indexOf(item.parent_ind) > -1) {
            let keysArr = itemKeys[item.parent_ind], // 对象层级
              value = obj // 对应值
            keysArr.map((key, index) => {
              value = value[key]
            })
            value[item.parent_ind][item.name] = {}
            // name的层级就是name父级层级+父级
            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
}

问题:如果无限级+乱序,需要加递归

你可能感兴趣的:(记一个面试题)