// 问题综述:有以下组织节点数据,回答下面问题(用 TS 实现)
const orgTreeData = [
{
username: "0-0",
userid: "0-0",
children: [
{
username: "0-0-0",
userid: "0-0-0",
children: [
{ username: "0-0-0-0", userid: "0-0-0-0" },
{ username: "0-0-0-1", userid: "0-0-0-1" },
{ username: "【此处写你的姓名】", userid: "0-0-0-2" }
]
},
{ username: "0-0-1", userid: "0-0-1" },
{ username: "0-0-2", userid: "0-0-2" }
]
},
{
username: "0-1",
userid: "0-1",
children: [
{ username: "0-1-0-0", userid: "0-1-0-0" },
{ username: "0-1-0-1", userid: "0-1-0-1" },
{ username: "0-1-0-2", userid: "0-1-0-2" }
]
},
{
username: "0-2",
userid: "0-2"
}
]
// 问题一:用 ts 描述 treeData 的数据结构
type TreeNode = {
username: string;
userid: string;
children?: TreeNode[];
}
type TreeData = TreeNode[];
let treeData: TreeData = [
{
username: "0-0",
userid: "0-0",
children: [
{
username: "0-0-0",
userid: "0-0-0",
children: [
{ username: "0-0-0-0", userid: "0-0-0-0" },
{ username: "0-0-0-1", userid: "0-0-0-1" },
{ username: "【此处写你的姓名】", userid: "0-0-0-2" }
]
},
{ username: "0-0-1", userid: "0-0-1" },
{ username: "0-0-2", userid: "0-0-2" }
]
},
{
username: "0-1",
userid: "0-1",
children: [
{ username: "0-1-0-0", userid: "0-1-0-0" },
{ username: "0-1-0-1", userid: "0-1-0-1" },
{ username: "0-1-0-2", userid: "0-1-0-2" }
]
},
{
username: "0-2",
userid: "0-2"
}
]
console.log(treeData); // 问题一:结果输出
// 问题二:用 ts 写一个根据用户名称,查找 userid 的方法。请将你的姓名随机写到上述数据中,用该方法查找出你的姓名对应的 userid
const queryUserIdByUserName: (orgTreeData: TreeData, username: string) => string = function(orgTreeData, username) {
let userid: string = '';
orgTreeData.forEach(orgItem => {
if (orgItem.username === username) {
userid = orgItem.userid;
}
if (orgItem.children && orgItem.children.length) {
let tempId: string = queryUserIdByUserName(orgItem.children, username);
if (tempId) userid = tempId;
}
})
return userid;
}
console.log(queryUserIdByUserName(treeData, '【此处写你的姓名】')); // 问题二:结果输出
// 问题三:用 ts 写一个获取最长路径的方法。如以上示例的数据,最长路径为["0-0", "0-0-0", "0-0-0-0"](由 userid 组成,多个最长时返回任意一个即可)
const queryMaxPathHandle: (orgTreeData: TreeData) => string[] = function(orgTreeData) {
let deepPathList: string[] = []; // 路径集合
let maxDeepPath = 0; // 最大路径层级
// 最深优先计算
function depthFirstHandle(orgItem: { userid: string, username: string, children?: TreeData }, currentPath: string[], depth: number) {
currentPath.push(orgItem.userid);
if (depth > maxDeepPath) {
deepPathList = [...currentPath];
maxDeepPath = depth;
}
if (orgItem.children && orgItem.children.length > 0) {
for (let child of orgItem.children) {
depthFirstHandle(child, currentPath, depth + 1);
}
}
currentPath.pop();
}
for (const orgItem of orgTreeData) {
depthFirstHandle(orgItem, [], 1);
}
return deepPathList;
}
console.log(queryMaxPathHandle(treeData)); // 问题三:结果输出
发表评论