递归解决多级数组
- 我们考虑利用递归 就必须等有一个判断条件 中断 递归 不然容易出现死循环
- 我们在进如函数递归是 要注意第二次调用自身是 函数的参数要是数据的子数据
我们在进如函数递归是 要注意第二次调用自身是 函数的参数要是数据的子数据
let arr = [
{ name: '小明同学', children: [ { name: '小明同学', children: [ { name: '小明同学' } ] } ] }
]
function fn (arr, newArr = []) {
arr.forEach(item => {
typeof item === 'object' && item.name && newArr.push(item.name) // 先判断当前项是否是对象。 当前项是否存在你想要的数据。都符合,把数据push到新数组里
item.children && item.children instanceof Array && fn(item.children, newArr) // 当前项是否还有子节点,子节是否是数组, 如果是继续调用自己。再循环遍历一次.
})
return newArr
}
fn(arr) // ['小明同学','小明同学','小明同学']
function fn1 (arr, newArr = []) {
function recursion (arr) {
arr.forEach(item => {
newArr.push(item.name)
item.children && recursion(item.children)
})
}
return newArr
}
fn1(arr) // ['小明同学','小明同学','小明同学']
数组扁平化处理
var arr = [ { name: 1 }, { name: 2, children: [ { name: 3 } ] } ]
function flatten(arr) {
return [].concat( ...arr.map( item => item.children ? [].concat(item, ...flatten(item.children)) : [].concat(item) ))
}
// [{ name:1 }, { name: 2, children: [ { name: 3 } ] }, { name:3 }]
枪在手,跟我走。