实现一个 convert 函数实现下面的需求,要求支持多级(可以根据 list,实现 4 级 5 级以及尽可能降低时间复杂度)
// ["一级品类", "二级品类", "三级品类"] let list = [ ["个护", "全身", "止汗"], ["个护", "全身", "身体乳液"], ["个护", "全身", "身体护理套装"], ["个护", "全身", "身体磨砂"], ["彩妆", "唇部", "唇线"], ["彩妆", "唇部", "唇膏"], ["彩妆", "唇部", "唇部妆前定妆"], ["彩妆", "唇部", "唇釉"], ["彩妆", "彩妆套装", "彩妆套装"], ["彩妆", "眼部", "眉妆"], ] const result = convert(list, ...); // 转换后的结果如下 let result = [ { 'name':'个护', 'children': [ { 'name': '全身', 'children': [ { 'name':'止汗' }, { 'name': '身体乳液' } ... ] } ] } ... ]
已解决
悬赏分:70
- 解决时间 2021-11-26 11:25
点赞 0反对 0举报 0
收藏 0
分享 0
回答1
最佳
-
const fn = list => { let rtn = [] list.forEach(arr => { let p = rtn arr.forEach((name, level) => { if (p.map(item => item.name).indexOf(name) < 0) p.push({ name }) const index = p.map(item => item.name).indexOf(name) if (level === arr.length - 1) return if (!p[index].children) p[index].children = [] p = p[index].children }) }) return rtn } console.log(JSON.stringify(fn(list), ' ', 2))
[ { "name": "个护", "children": [ { "name": "全身", "children": [ { "name": "止汗" }, { "name": "身体乳液" }, { "name": "身体护理套装" }, { "name": "身体磨砂" } ] } ] }, { "name": "彩妆", "children": [ { "name": "唇部", "children": [ { "name": "唇线" }, { "name": "唇膏" }, { "name": "唇部妆前定妆" }, { "name": "唇釉" } ] }, { "name": "彩妆套装", "children": [ { "name": "彩妆套装" } ] }, { "name": "眼部", "children": [ { "name": "眉妆" } ] } ] } ] [Finished in 0.1s]
支持 0 反对 0 举报2021-11-25 16:10