一个数组的数据是一组对象,对象可能有一个属性是与数组相似的结构
要求,把数组中对象中的一个值作为新对象的键,数组中对象的另一个值作为新对象的值,包括嵌套的数组中的对象都放到新对象中
如果有一个导航菜单的数据是下面的结构
const MenuList = [{
key: '/dashboard',
label: 'DASHBOARD',
children: [{
key: '/dashboard/console',
label: '主控页',
}, {
key: '/dashboard/monitor',
label: '监控页',
}, {
key: '/dashboard/workplace',
label: '工作台',
}]
}, {
key: '/notion',
label: '公告管理',
}, {
key: '/charts',
label: '图表管理',
children: [{
key: '/charts/bar',
label: '柱状图'
}, {
key: '/charts/pic',
label: '饼图'
},]
}]
将上面数据转成下面的格式
const newMenuList = {
"dashboard": "DASHBOARD",
'/dashboard/console': "主控页",
'/dashboard/monitor': "监控页",
"/dashboard/workplace": "工作台",
"/notion": "公告管理",
"/charts": "图表管理",
"/charts/bar": "柱状图",
"/charts/pic": "饼图"
}
实现代码
const menuKeyAndLaber = (lists) => {
//首先进行深拷贝
const list = JSON.parse(JSON.stringify(lists))
let newObj = {}
const degui = (list) => {
//先遍历数组
list.forEach(item => {
//遍历数组项的对象
for (const key in item) {
//将需要的值添加到新对象中
if (key === "key") newObj[item.key] = item.label
//如果有子项,需要用到递归
if (key === 'children') degui(item[key])
}
});
}
//调用一下递归函数
degui(list)
//返回新数组
return newObj
}