【发布时间】:2020-06-04 02:23:06
【问题描述】:
我正在尝试创建一棵树。但我不知道如何在树中递归替换项目。
我有一个项目数组,每个项目如果在顶部 parentId 是未定义的,如果有 clindren,每个孩子都有一个 parentId 属性,显示他的父母如何。
我正在尝试创建一种方法来在 children 属性中找到该项目,该项目可以具有 1 个或多个级别。
如果它可能返回更新的数组
这是我的代码:
const onChangeStatusEditable = () => {
const updatedBranch: IBranch = Object.assign({}, branch, {
editable: !editable,
});
let updatedBranchs: Array<IBranch> = [];
if (parentId === undefined) {
const index = branchs.findIndex( (b: IBranch) => b.id === branch.id);
updatedBranchs = Object.assign([], branchs, {
[index]: updatedBranch,
});
onUpdateBranchs(updatedBranchs);
} else {
// EDIT: efforts
I'm tryin with this recursive method
}
};
// EDIT
export const replaceBranch = (branchs: Array<IBranch>, branch: IBranch): Array<IBranch> => {
let updated: Array<IBranch> = [];
branchs.forEach((b: IBranch) => {
if (b.children) {
updated = replaceBranch(b.children, branch);
if (updated) {
return updated;
}
}
if (b.id === branch.id) {
const index: number = branchs.findIndex((c: IBranch) => c.id === branch.id);
b.children[index] = branch;
updated = b.children;
console.log("founded: ", b);
return updated;
}
});
return updated;
};
IBrach 有这个接口:
export interface IBranch {
id: number;
parentId: number | undefined;
active: boolean;
favorite: boolean;
title: string;
editable: boolean;
level: number;
checkbox: boolean;
checkboxEnabled: boolean;
children: Array<any>;
}
数据:
[
{
"id":0,
"active":false,
"favorite":false,
"level":0,
"title":"New Branch 0",
"editable":false,
"checkbox":false,
"checkboxEnabled":false,
"children":[
{
"id":1,
"parentId":0,
"active":false,
"favorite":false,
"level":1,
"title":"New Branch 1",
"editable":false,
"checkbox":false,
"checkboxEnabled":false,
"children":[
]
}
]
}
]
【问题讨论】:
-
你能告诉我们你到目前为止的努力吗?
-
当然,我已经编辑了问题
-
一小组样本数据也很有帮助。恐怕它的图片没有多大帮助。
-
请考虑编辑此处的代码以构成一个minimal reproducible example,适合放入像The TypeScript Playground 这样的独立IDE。现在有未定义/未声明变量的错误。如果您不询问这些错误,请添加(或最好删除)代码以使它们消失。祝你好运!
标签: javascript typescript recursion