美文网首页
记一个面试题

记一个面试题

作者: 变异宝宝 | 来源:发表于2021-05-13 09:29 被阅读0次

题目

假设后端同学通过接口向前端返回了天猫的行业信息,例如:
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
}

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

相关文章

  • 记一个面试题

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

  • NLP 面试题(二)和答案,附有参考URL

    面试题目:记第一次NLP面试 链接:https://zhuanlan.zhihu.com/p/83080115 注...

  • 面试材料

    面试经验 面试题1 面试题2 面试题3 面试题4 面试题5 面试题6――数据结构 面试题7――网络 面试题8――汇...

  • 面试题

    Java面试题集 - 简书 Java内部类详解 - 海 子 - 博客园 记一次 Android 面试 - 简书 A...

  • 1.2 数组连续递增区间

    记某面试题目:输入为正整数数组,找出排好序的数组的所有连续区间, 如果该连续空间只有一个数字,将该数字放入一个数组...

  • 高阶面试题

    webpack面试题 面试题:webpack插件 Git面试题 面试题:git常用命令 面试题:解决冲突 面试题:...

  • this的指向的面试题

    面试题1 面试题2 面试题3 面试题4

  • 面试所涉及的问题

    面试题参考1 : 面试题 面试题参考2 : 内存管理 面试题参考3 :面试题 ...

  • java实习生面试题题库

    java实习生面试题,java基础面试,java面试题2018及答案,java面试题库 1、[一个.java源文件...

  • 记一道控制并发数的前端面试题【转掘金】

    记一道控制并发数的前端面试题【手动维护 HTTP 请求排队】 题目 原文来自掘金https://juejin.im...

网友评论

      本文标题:记一个面试题

      本文链接:https://www.haomeiwen.com/subject/xajtjltx.html