Last active
March 12, 2022 16:08
-
-
Save Sevichecc/6fe4eeed295c832111fd7fbedc58cc05 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 数组转为对象 | |
// 完全看不懂!这里是抄小黄狗的😭 | |
var menuArr = [ | |
[1, "Area1", -1], | |
[2, "Area2", -1], | |
[3, "Area1-1", 1], | |
[4, "Area1-2", 1], | |
[5, "Area2-1", 2], | |
[6, "Area2-2", 2], | |
[7, "Area1-2-3", 4], | |
[8, "Area2-2-1", 6], | |
]; | |
function arrToObj(arr) { | |
let obj = {}; | |
// 先都变成object | |
for (let [order, name, preId] of arr) { | |
obj[order] = { | |
name: name, | |
submenu: {}, | |
preId: preId | |
} | |
} | |
// 整理object层次,筛选放到一个新的object里面 | |
let menu = {} | |
for (let order in obj) { | |
//把每一项都提取出来比较 | |
let id = order; | |
//提取菜单内容name/submenu | |
let content = { | |
name: obj[order].name, | |
submenu: obj[order].submenu | |
} | |
let preId = obj[order].preId | |
// 排除第一层级 | |
if (preId === -1) { | |
menu[id] = content | |
} else { | |
// 给下面层级的menu赋值, | |
// 从下往上回溯,先给下层菜单赋值 submenu[id]=content | |
// 因为第三个数字(preid)是上级菜单的第一个数字(order)所以用obj[preId].附加到上层菜单中 | |
obj[preId].submenu[id] = content | |
} | |
} | |
return menu | |
} | |
// 参考:小黄狗 https://github.com/e-han-cyber/baidu-frontend-prictice/blob/main/day09-10/js/task3.js | |
// 实现数组转换为对象 | |
// function arrToObj(arr) { | |
// let obj = {}; | |
// let map = {} | |
// for (let a of arr) { | |
// let id = a[0]; | |
// let sub = a[2]; | |
// // 使用 pid 记录上一级菜单 | |
// map[id] = { name: a[1], pid: sub, submenu: {} } | |
// } | |
// for (let key in map) { | |
// let id = key; | |
// let item = map[key]; | |
// let subid = map[key].pid; | |
// if (subid === -1) { | |
// obj[id] = item | |
// delete item.pid | |
// } else { | |
// //subid 正好对应要存的 id 的对象 | |
// map[subid].submenu[id] = item; | |
// delete item.pid | |
// } | |
// } | |
// return obj | |
console.log(arrToObj(menuArr)); | |
let menuObject = arrToObj(menuArr) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment