树的结构大概是这样的:
职务树的结构图:
递归的方法1:不使用return ,ids是个数组类似
getFindRowsKey(ids, tree) {
for (let i = 0; i < tree.length; i++) {
const node = tree[i];
console.log('我在前面~~~~i:', i, 'name', node.dutyName, '~~~~~~~~~~~~~~~~ids:', ids);
if (node.children) {
this.getFindRowsKey(ids, node.children);
}
console.log('我在后面~~~~i:', i, 'name', node.dutyName, '~~~~~~~~~~~~~~~~ids:', ids);
if (ids.includes(node.id) && !ids.includes(node.parentId) && node.parentId != -1) {
ids.push(node.parentId);
}
}
return ids;
}
执行的顺序:(可以看出之前进入子的,后面都有继续执行完。)
加上return 之后
getFindRowsKey(ids, tree) {
for (let i = 0; i < tree.length; i++) {
const node = tree[i];
console.log('我在前面~~~~i:', i, 'name', node.dutyName);
if (node.children) {
return this.getFindRowsKey(ids, node.children);
}
console.log('我在后面~~~~i:', i, 'name', node.dutyName);
if (ids.includes(node.id) && !ids.includes(node.parentId) && node.parentId != -1) {
ids.push(node.parentId);
}
}
return ids;
}
return 之后 可以看出技术经理 因为有子节点之后,进入子节点的执行,后面就没有接下去往下执行的。
数据的影响:下面一张图可以看出来 对数据的影响是同步的。