开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 176|回复: 1
收起左侧

[易语言] json列表转到树形数据列表

[复制链接]
结帖率:69% (29/42)
发表于 2024-3-25 19:36:03 | 显示全部楼层 |阅读模式   广东省惠州市
100精币

原始数据
  
[
{
"a": "ROOT",
"b": "316",
"c": "a0"
},
{
"a": "316",
"b": "JYPT999.221209518016.0",
"c": "a1"
},
{
"a": "JYPT999.221209518016.0",
"b": "JYPT999.221209518016.1",
"c": "a2"
},
{
"a": "JYPT999.221209518016.1",
"b": "prod.10086000048093",
"c": "a3"
},
{
"a": "JYPT999.221209518016.0",
"b": "prod.10086000053018",
"c": "a4"
},
{
"a": "361",
"b": "prod.10086000053018",
"c": "a5"
}
]

参考结果
  
[
{
"a": "ROOT",
"b": "316",
"c": "a0",
"d": [
{
"a": "316",
"b": "JYPT999.221209518016.0",
"c": "a1",
"d": [
{
"a": "JYPT999.221209518016.0",
"b": "JYPT999.221209518016.1",
"c": "a2",
"d": [
{
"a": "JYPT999.221209518016.1",
"b": "prod.10086000048093",
"c": "a3"
}
]
},
{
"a": "JYPT999.221209518016.0",
"b": "prod.10086000053018",
"c": "a4"
}
]
},
{
"a": "361",
"b": "prod.10086000053018",
"c": "a5"
}
]
}
]

有个js版的,能否写一个易语言

  
function listToTree (items) {  <BR>    // 创建一个映射来快速查找节点  <BR>    const nodeMap = {};  <BR>      <BR>    // 创建所有节点,并放入映射中  <BR>    items.forEach (item => {  <BR>        const id = item.b;  <BR>        const parentId = item.a;  <BR>        nodeMap[id] = { ...item, children: [] };  <BR>    });  <BR>      <BR>    // 构建树形结构  <BR>    items.forEach (item => {  <BR>        const id = item.b;  <BR>        const parentId = item.a;  <BR>          <BR>        // 将子节点附加到父节点上  <BR>        if (parentId !== ' ROOT') {  <BR>            const parentNode = nodeMap[parentId];  <BR>            if (parentNode) {  <BR>                parentNode.children.push(nodeMap[id]);  <BR>            } else {  <BR>                console.warn(`Parent node with ID ${parentId} not found for child node ${id}`);  <BR>            }  <BR>        } else {  <BR>            // 处理根节点  <BR>            if (!this.rootNodes) {  <BR>                this.rootNodes = [];  <BR>            }  <BR>            this.rootNodes.push(nodeMap[id]);  <BR>        }  <BR>    });  <BR>      <BR>    return this.rootNodes;  <BR>}  <BR>  <BR>// 打印树形结构  <BR>function printTree(node, level = 0) {  <BR>    const indent = '  '.repeat(level);  <BR>    console.log(`${indent}${node.b} (${node.c})`);  <BR>      <BR>    if (node.children) {  <BR>        node.children.forEach(child => printTree(child, level + 1));  <BR>    }  <BR>}  <BR>  <BR>// 给定的数据  <BR>const data = [  <BR>    { "a": "ROOT", "b": "316", "c": "a0" },  <BR>    { "a": "316", "b": "prod.10086000053018", "c": "a0" },  <BR>    { "a": "316", "b": "JYPT999.221209518016.0", "c": "a1" },  <BR>    { "a": "JYPT999.221209518016.0", "b": "JYPT999.221209518016.1", "c": "a2" },  <BR>    { "a": "JYPT999.221209518016.1", "b": "prod.10086000048093", "c": "a3" },  <BR>    { "a": "JYPT999.221209518016.0", "b": "prod.10086000053018", "c": "a4" }  <BR>];  <BR>  <BR>// 转换为树形结构  <BR>const tree = listToTree(data);  <BR>  <BR>// 打印树形结构  <BR>tree.forEach(root => printTree(root));<BR>console.log(tree);



回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:69% (29/42)

签到天数: 4 天

 楼主| 发表于 2024-3-25 19:38:01 | 显示全部楼层   广东省惠州市
function listToTree(items) {  
    // 创建一个映射来快速查找节点  
    const nodeMap = {};  

    // 创建所有节点,并放入映射中  
    items.forEach(item => {  
        const id = item.b;  
        const parentId = item.a;  
        nodeMap[id] = { ...item, children: [] };  
    });  

    // 构建树形结构  
    items.forEach(item => {  
        const id = item.b;  
        const parentId = item.a;  

        // 将子节点附加到父节点上  
        if (parentId !== 'ROOT') {  
            const parentNode = nodeMap[parentId];  
            if (parentNode) {  
                parentNode.children.push(nodeMap[id]);  
            } else {  
                console.warn(`Parent node with ID ${parentId} not found for child node ${id}`);  
            }  
        } else {  
            // 处理根节点  
            if (!this.rootNodes) {  
                this.rootNodes = [];  
            }  
            this.rootNodes.push(nodeMap[id]);  
        }  
    });  

    return this.rootNodes;  
}  

// 打印树形结构  
function printTree(node, level = 0) {  
    const indent = '  '.repeat(level);  
    console.log(`${indent}${node.b} (${node.c})`);  

    if (node.children) {  
        node.children.forEach(child => printTree(child, level + 1));  
    }  
}  

// 给定的数据  
const data = [  
    { "a": "ROOT", "b": "316", "c": "a0" },  
    { "a": "316", "b": "prod.10086000053018", "c": "a0" },  
    { "a": "316", "b": "JYPT999.221209518016.0", "c": "a1" },  
    { "a": "JYPT999.221209518016.0", "b": "JYPT999.221209518016.1", "c": "a2" },  
    { "a": "JYPT999.221209518016.1", "b": "prod.10086000048093", "c": "a3" },  
    { "a": "JYPT999.221209518016.0", "b": "prod.10086000053018", "c": "a4" }  
];  

// 转换为树形结构  
const tree = listToTree(data);  

// 打印树形结构  
tree.forEach(root => printTree(root));
console.log(tree); 
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表