递归获取树形数据总是莫名其妙调用多余数据

如图:树形数据结构为:
递归获取树形数据总是莫名其妙调用多余数据
递归获取树形数据总是莫名其妙调用多余数据
简单的说就是每一层带一个children数据,里面有和上一层结构一样的数组数据;

然后有一组数据如:
递归获取树形数据总是莫名其妙调用多余数据

里面的数字对应树形数据中的dict_code值;

然后我是用递归思想想遍历对应的dict_name值;

如图:
递归获取树形数据总是莫名其妙调用多余数据

但是总是输出:
递归获取树形数据总是莫名其妙调用多余数据

原因是在获取对应的dict_name以后调用函数没有停止,继续执行导致,有没有知道怎么写才能正确输出dict_name的朋友呢?

回答

这需要加return吧

if(arr[i].children) return recursionChild(val,arr[i].children)

核心问题在倒数第四行。

if (arr[i].children) {

let res = recursionChild(val, arr[i].children)

if (res) return res // if条件是不能省略的

}

var data = [

{

children: [

{

dict_name: 'name-11',

dict_code: '11'

}

],

dict_code: '1',

dict_name: '境外'

},

{

children: [

{

dict_name: 'name-8',

dict_code: '8',

}

],

dict_code: '2',

dict_name: 'name-2'

},

{

children: [

{

dict_name: 'name-9',

dict_code: '9',

children: [

{

dict_name: 'name-31',

dict_code: '31',

}

],

}

],

dict_code: '3',

dict_name: 'name-3'

},

];

var codes = ['1','2','8','31']

function getTreeNode(data, callback) {

return data.reduce((res,item) => {

if(callback(item)) res.push(item);

return Array.isArray(item.children) ? res.concat(getTreeNode(item.children, callback)) : res;

}, []);

}

getTreeNode(data, item => codes.includes(item.dict_code)).map(item => item.dict_name)

以上是 递归获取树形数据总是莫名其妙调用多余数据 的全部内容, 来源链接: utcz.com/a/66983.html

回到顶部