// 例如将 input 转成output的形式
// let input = [
// {
// id: 1, val: '学校', parentId: null
// }, {
// id: 2, val: '班级1', parentId: 1
// }, {
// id: 3, val: '班级2', parentId: 1
// }, {
// id: 4, val: '学生1', parentId: 2
// }, {
// id: 5, val: '学生2', parentId: 2
// }, {
// id: 6, val: '学生3', parentId: 3
// },
// ]
// let output = {
// id: 1,
// val: '学校',
// children: [{
// id: 2,
// val: '班级1',
// children: [
// {
// id: 4,
// val: '学生1',
// children: []
// },
// {
// id: 5,
// val: '学生2',
// children: []
// }
// ]
// }, {
// id: 3,
// val: '班级2',
// children: [{
// id: 6,
// val: '学生3',
// children: []
// }]
// }]
// }
// // 代码实现
// function arrayToTree(array) {
// let root = array[0]
// array.shift()
// let tree = {
// id: root.id,
// val: root.val,
// children: array.length > 0 ? toTree(root.id, array) : []
// }
// return tree;
// }
// function toTree(parenId, array) {
// let children = []
// let len = array.length
// for (let i = 0; i < len; i++) {
// let node = array[i]
// if (node.parentId === parenId) {
// children.push({
// id: node.id,
// val: node.val,
// children: toTree(node.id, array)
// })
// }
// }
// return children
// }
// console.log(arrayToTree(input))
//扁平化数组
let arr = [1, [2], [1,[3,4], 3], [[1,2,[3,[4,[4,[5,5]]]]]], 1,2,3,[4,4,[3]] ];
// function flatArr(arr, flatResult) {
// if(!(Array.isArray(arr))) throw new Error('you must input a array');
// for(let a of arr) {
// if(!Array.isArray(a)) flatResult.push(a);
// else flatArr(a, flatResult)
// }
// return flatResult;
// }
// console.log(flatArr(arr, []))
//带有深度地扁平化数组
function flatByDep(arr, flatResult, depth) {
if(!(Array.isArray(arr))) throw new Error('you muit input a arr');
if(depth == undefined) depth = arr.length
for(let a of arr) {
if(Array.isArray(a) && depth > 0) {
flatByDep(a, flatResult, depth - 1);
} else flatResult.push(a)
}
return flatResult
}
console.log(flatByDep(arr, [],2))
//使用concact
// while(arr.some(Array.isArray)) {
// arr = [].concat(...arr)
// }
// console.log(arr)
console