Skip to content

Instantly share code, notes, and snippets.

@Sevichecc
Last active March 12, 2022 16:08
Show Gist options
  • Save Sevichecc/6fe4eeed295c832111fd7fbedc58cc05 to your computer and use it in GitHub Desktop.
Save Sevichecc/6fe4eeed295c832111fd7fbedc58cc05 to your computer and use it in GitHub Desktop.
// 数组转为对象
// 完全看不懂!这里是抄小黄狗的😭
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