js获取树形结构的所有子节点和父节点
js获取树形结构的所有子节点和父节点
let datasource = [
{
path: "/nested",
title: "Nested",
children: [
{
path: "/nested/menu1",
title: "Menu1",
children: [
{
path: "/nested/menu1/menu1-1",
title: "Menu1-1"
},
{
path: "/nested/menu1/menu1-2",
title: "Menu1-2"
},
{
path: "/nested/menu1/menu1-3",
title: "Menu1-3"
},
]
},
{
path: "/nested/menu2",
title: "Menu2",
}
]
}
]
const targetData = {};
function loops(data = [], parent) {
return data.map(({ children, title: value }) => {
const node = {
value,
parent
}
targetData[value] = node;
node.children = loops(children, node);
return
})
}
function getNode(value) {
let node = [];
let currentNode = targetData[value];
node.push(currentNode.value);
if (currentNode.parent)
{
return node
}
loops(datasource)
//获取父节点
const target = getNode('Menu1-3')
console.log(target)
}
//获取某节点的所有子节点
getChild(nodes, item, arr) {
for (let el of nodes) {
if (el.nodeId === item) {
arr.push(el.nodeId);
if (el.children) {
this.childNodesDeep(el.children, arr);
}
} else if (el.children) {
this.getChild(el.children, item, arr);
}
}
return arr;
},
childNodesDeep(nodes, arr) {
if (nodes)
nodes.forEach((ele) => {
arr.push(ele.nodeId);
if (ele.children) {
this.childNodesDeep(ele.children, arr);
}
});
}
//获取某节点的所有子节点
getChild(nodes,item,arr){
for(let el of nodes){
if(el.pid === item){
arr.push(el.id);
if(el.children){
this.childNodesDeep(el.children,arr);
}
}else if(el.children){
this.getChild(el.children,item,arr);
}
}
return arr;
},
childNodesDeep(nodes,arr){
if(nodes){
nodes.forEach((ele) => {
arr.push(ele.id);
if(ele.children){
this.childNodesDeep(ele.children,arr);
}
})
}
}
愿中国青年都摆脱冷气,只是向上走,不必听自暴自弃者流的话。
能做事的做事,能发声的发声。有一分热,发一分光,就令萤火一般,也可以在黑暗里发一点光,不必等候炬火。
此后如竟没有炬火:我便是唯一的光。
倘若有了炬火,出了太阳,我们自然心悦诚服的消失。不但毫无不平,而且还要随喜赞美这炬火或太阳;因为他照了人类,连我都在内
分类:
前端
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构