问题:做权限菜单时,接口权限返回在最底层,想到了可以用递归函数来写,但是遇到函数返回值始终为undefined,具体代码如下:
var list = [{
name: 11,
subs: [{
name: 22,
subs: [{
name: 33,
subs: [{ // 需要获取到该层的数据
name: 55,
subs: []
}, {
name: 66,
subs: []
}]
}]
}, {
name: 33,
subs: [{
name: 44,
subs: [{
name: 77,
subs: []
}]
}]
}]
}];
// 有误代码
function getArrayFlat(arr) {
if(arr.every(item => item.subs.length == 0)) return arr;
getArrayFlat( arr.map(item => item.subs).flat() )
}
console.log( getArrayFlat(list) ) ; // undefined
最终想要的结果是arr,并且打断点是发现arr已经获取到正确的值了,但是console出结果为undefined,已定义未赋值。。递归函数是函数的自身调用,所以还需将该函数进行return,就能打印出正确值了
function getArrayFlat(arr) {
if(arr.every(item => item.subs.length == 0)) return arr;
return getArrayFlat( arr.map(item => item.subs).flat() ) // 最终结果是该函数的调用结果
}