一、需求描述
原始数据长这样↓
然后要将它转为这样↓
二、JS实现
第一步:分组
// 第一步:用parentId做一个映射
const obj = {}
data.forEach(item => {
const id = item.parentId
//分组,将相同父级的对象放到同一个对象中
obj[id] ? obj[id].push(item) : obj[id] = [item]
})
实现效果
第二步:合并,去掉空children
//第二步:处理成数组 - 没有子集去掉children
const newData = []
Object.keys(obj).forEach(key => {
//①拿出每一个分组的数组
const parent = obj[key]
//②这比较难理解,你们自己悟吧!
//首先map()出子集的menuId,然后filter()过滤掉子集为null的子集,自己在控制台打印看一遍就懂了
const children = parent.filter(item => item.menuId).map(son => ({ menuName: son.menuName, menuId: son.menuId }))
//判断children长度,决定是否添加到父级中,为0就不添加
const sonObj = children.length ? {
parentName: parent[0].parentName,
parentId: parent[0].parentId,
children
} : {
parentName: parent[0].parentName,
parentId: parent[0].parentId
}
newData.push(sonObj)
})
三:致谢词
特别感谢技术支持大佬@小小林同志