数组扁平化 -- reduce
const arr = [1, 2, [3, 4],[5, [6, 7, [8, [9]], 10]], [11, 12]]
const myFlat = (arr) => {
return arr.reduce((pre, cur) => {
if (Array.isArray(cur)) {
return pre.concat(myFlot(cur))
} else {
return pre.concat(cur)
}
}, [])
}
console.log(myFlat(arr))
对象数组扁平化为树 -- 递归&Map
let arr = [{
id: 1,
name: '部门1',
pid: 0
},{
id: 2,
name: '部门2',
pid: 1
},{
id: 3,
name: '部门3',
pid: 1
},{
id: 4,
name: '部门4',
pid: 3
},{
id: 5,
name: '部门5',
pid: 4
}]
const getChildren = (arr, result, id) => {
arr.forEach((item) => {
if(item.pid === id) {
const newItem = {...item, children: []}
result.push(newItem)
getChildren(arr, newItem.children, newItem.id)
}
})
return result
}
const flatObjArr = (arr, id) => {
let result = []
getChildren(arr, result, id)
return result
}
flatObjArr(arr, 0)
function arrayToTree(items) {
const result = []
const itemMap = {}
for (const item of items) {
itemMap[item.id] = {
...item,
children: []
}
}
console.log('map储存', itemMap)
items.forEach((item) => {
let id = item.id
let pid = item.pid
let treeItem = itemMap[id]
if (pid === 0) {
result.push(treeItem)
} else {
if (1) {
itemMap[pid].children.push(treeItem)
}
}
})
console.log('结果', itemMap, result)
}
arrayToTree(arr)