JSON数据到Treeview JavaScript

如何解决JSON数据到Treeview JavaScript

请帮助我通过javascript数组创建treeview。场景是我想用反向级别创建Treeview。例如:

var arr = [{
            "ID": 1,"Phone": "(403) 125-2552","City": "Coevorden","Name": "Grady"
        },{
            "ID": 2,"Phone": "(979) 486-1932","City": "Chełm","Name": "Scarlet"
        },{
            "ID": 3,"Phone": "(573) 685-8350","City": "Wardha","Name": "Adria"
        },{
            "ID": 4,"parentID": 3,"Phone": "(630) 292-9737","City": "Villers-la-Loue","Name": "Xerxes"
        },{
            "ID": 5,"Phone": "(755) 968-6539","City": "Gönen","Name": "Madeson"
        },{
            "ID": 6,"parentID": 5,"Phone": "(644) 892-5485","City": "Timkur","Name": "Rae"
        },{
            "ID": 7,"Phone": "(896) 297-6568","City": "Louvain-la-Neuve","Name": "Celeste"
        },{
            "ID": 8,"Phone": "(168) 452-3538","City": "Worksop","Name": "Rowan"
        },{
            "ID": 9,"Phone": "(873) 337-9560","City": "Bad Neuenahr-Ahrweiler","Name": "Kendall"
        },{
            "ID": 10,"Phone": "(450) 579-0491","City": "MIDdelburg","Name": "Madaline"
        },{
            "ID": 11,"Phone": "(111) 162-2502","City": "Birecik","Name": "Chandler"
        },{
            "ID": 12,"parentID": 8,"Phone": "(712) 483-3905","City": "Courbevoie","Name": "Craig"
        },{
            "ID": 13,"Phone": "(872) 499-5833","City": "Cuccaro Vetere","Name": "Basia"
        },{
            "ID": 14,"parentID": 6,"Phone": "(724) 797-0077","City": "Portree","Name": "Elmo"
        },{
            "ID": 15,"Phone": "(366) 967-0433","City": "Dublin","Name": "Cairo"
        },{
            "ID": 16,"parentID": 11,"Phone": "(147) 708-7321","City": "Rivière-du-Loup","Name": "Mannix"
        },{
            "ID": 17,"Phone": "(407) 519-9894","City": "Roubaix","Name": "Justine"
        },{
            "ID": 18,"parentID": 14,"Phone": "(938) 793-5446","City": "Eugene","Name": "Dahlia"
        },{
            "ID": 19,"Phone": "(425) 682-2189","City": "Salisbury","Name": "Irene"
        },{
            "ID": 20,"parentID": 12,"Phone": "(351) 187-8200","City": "Garaguso","Name": "Trevor"
        },{
            "ID": 21,"Phone": "(601) 944-5214","City": "Pointe-au-Pic","Name": "Iris"
        },{
            "ID": 22,"parentID": 20,"Phone": "(479) 532-6127","City": "Salt Lake City","Name": "Fleur"
        },{
            "ID": 23,"parentID": 19,"Phone": "(339) 973-1695","City": "Meldert","Name": "Hayley"
        },{
            "ID": 24,"Phone": "(946) 766-1649","City": "Corral","Name": "Baker"
        },{
            "ID": 25,"Phone": "(964) 413-7033","City": "Joliet","Name": "Leo"
        },{
            "ID": 26,"parentID": 7,"Phone": "(898) 476-0059","City": "Burntisland","Name": "Rigel"
        },{
            "ID": 27,"parentID": 21,"Phone": "(163) 267-0914","City": "Lac Ste. Anne","Name": "Scarlett"
        },{
            "ID": 28,"parentID": 10,"Phone": "(486) 637-9167","City": "San Maurizio Canavese","Name": "Wang"
        },{
            "ID": 29,"Phone": "(268) 646-0066","City": "Palermo","Name": "Eagan"
        },{
            "ID": 30,"parentID": 2,"Phone": "(641) 756-7073","City": "Harrison Hot Springs","Name": "Hamilton"
        },{
            "ID": 31,"parentID": 26,"Phone": "(820) 709-1328","City": "Ottignies","Name": "Liberty"
        },{
            "ID": 32,"Phone": "(915) 642-4154","City": "Bihain","Name": "Noel"
        },{
            "ID": 33,"parentID": 27,"Phone": "(137) 830-3127","City": "Kapuskasing","Name": "AIDan"
        },{
            "ID": 34,"parentID": 31,"Phone": "(594) 856-4377","City": "Buin","Name": "Murphy"
        },{
            "ID": 35,"parentID": 28,"Phone": "(951) 871-5461","City": "Gold Coast","Name": "Ila"
        },{
            "ID": 36,"Phone": "(781) 305-7685","City": "Castel Maggiore","Name": "Katelyn"
        },{
            "ID": 37,"Phone": "(716) 572-8734","City": "Chapecó","Name": "Logan"
        },{
            "ID": 38,"Phone": "(214) 619-7252","City": "Stargard Szczeciński",{
            "ID": 39,"Phone": "(422) 223-5912","City": "Bad Vöslau","Name": "Katell"
        },{
            "ID": 40,"Phone": "(921) 336-7339","City": "Namur","Name": "Lionel"
        },{
            "ID": 41,"Phone": "(386) 567-5819","City": "Borchtlombeek","Name": "Erin"
        },{
            "ID": 42,"Phone": "(308) 835-2758","City": "Alto del Carmen","Name": "Austin"
        },{
            "ID": 43,"Phone": "(410) 695-8540","City": "Saint-Laurent","Name": "Deanna"
        },{
            "ID": 44,"parentID": 4,"Phone": "(287) 866-8953","City": "Fiuminata","Name": "Darius"
        },{
            "ID": 45,"Phone": "(329) 372-0345","City": "Laurencekirk","Name": "Kelsey"
        },{
            "ID": 46,"Phone": "(566) 705-6690","City": "Lunel","Name": "Skyler"
        },{
            "ID": 47,"parentID": 44,"Phone": "(779) 411-0381","City": "Pontedera","Name": "Harding"
        },{
            "ID": 48,"parentID": 18,"Phone": "(393) 562-0884","City": "WIDooie","Name": "Marny"
        },{
            "ID": 49,"Phone": "(299) 937-4358","City": "Zamora","Name": "Brennan"
        },{
            "ID": 50,"parentID": 35,"Phone": "(474) 337-2674","City": "Hazaribag","Name": "Lance"
        }]

,并且我尝试按以下顺序创建树形视图: 预期的输出例如:

[
    {
        "ID": 1,"Name": "Grady"
    },{
        "ID": 2,"Name": "Scarlet","children": [
            {
                "ID": 30,"Name": "Hamilton","children": [
                    {
                        "ID": 54,"parentID": 30,"Phone": "(800) 876-5942","City": "Ribnitz-Damgarten","Name": "Kelsie","children": [
                            {
                                "ID": 62,"parentID": 54,"Phone": "(523) 159-2911","City": "Biała Podlaska","Name": "Clio"
                            }
                        ]
                    },{
                        "ID": 87,"Phone": "(500) 895-9220","City": "Piracicaba","Name": "Maya"
                    }
                ]
            },{
                "ID": 40,"Name": "Lionel"
            },{
                "ID": 43,"Name": "Deanna","children": [
                    {
                        "ID": 63,"parentID": 43,"Phone": "(475) 190-5102","City": "Nicoya","Name": "Nola"
                    },{
                        "ID": 98,"Phone": "(268) 572-5059","City": "San Marcello Pistoiese","Name": "Marny"
                    }
                ]
            }
        ]
    },{
        "ID": 3,"Name": "Adria","children": [
            {
                "ID": 4,"Name": "Xerxes","children": [
                    {
                        "ID": 44,"Name": "Darius","children": [
                            {
                                "ID": 47,"Name": "Harding","children": [
                                    {
                                        "ID": 92,"parentID": 47,"Phone": "(925) 263-0254","City": "Curacaví","Name": "Aristotle"
                                    }
                                ]
                            }
                        ]
                    },{
                        "ID": 56,"Phone": "(963) 719-2718","City": "Gore","Name": "Rafael"
                    }
                ]
            },{
                "ID": 58,"Phone": "(464) 318-7548","City": "Curepto","Name": "Leila"
            }
        ]
    }]

我以这个输出为例。我该怎么做才能得到这样的数据输出?

解决方法

        tree = function(array) {
        var o = {
            ID: 0
        }

        function arrGet(o) {
            if (Array.isArray(o.children)) {
                o.children.forEach(arrGet);
            }
        }
        array.forEach(function(a) {
            o[a.ID] = o[a.ID] || {
                ID: a.ID,parentID: a.parentID,Phone: a.Phone,City: a.City,Name: a.Name
            };
            a.children = o[a.ID].children;
            o[a.parentID] = o[a.parentID] || {
                ID: a.parentID
            };
            o[a.parentID].children = o[a.parentID].children || [];
            o[a.parentID].children.push(o[a.ID]);
        });
        arrGet(o[0]);
        return o[0].children;
    }(arr);
console.log('<pre>' + JSON.stringify(tree,4) + '</pre>');

我用此代码获得结果,但是对于没有父ID的对象,错误返回。 我必须使用此代码向没有parentID的对象手动写入parentID = 0。

,

您可以采用一个标准方法,即一个循环,即一个用于收集IDparentID的密钥和动态密钥的对象。

const
    getTree = (array,root,key,parent) => array.reduce((t,o) => {
        [[o[parent],{}],['children',[]]]
            .reduce((o,[k,v]) => o[k] = o[k] || v,t)
            .push(Object.assign(t[o[key]] = t[o[key]] || {},o));
        return t;
    },{})[root].children,data = [{ ID: 1,Phone: "(403) 125-2552",City: "Coevorden",Name: "Grady" },{ ID: 2,Phone: "(979) 486-1932",City: "Chełm",Name: "Scarlet" },{ ID: 3,Phone: "(573) 685-8350",City: "Wardha",Name: "Adria" },{ ID: 4,parentID: 3,Phone: "(630) 292-9737",City: "Villers-la-Loue",Name: "Xerxes" },{ ID: 5,Phone: "(755) 968-6539",City: "Gönen",Name: "Madeson" },{ ID: 6,parentID: 5,Phone: "(644) 892-5485",City: "Timkur",Name: "Rae" },{ ID: 7,Phone: "(896) 297-6568",City: "Louvain-la-Neuve",Name: "Celeste" },{ ID: 8,Phone: "(168) 452-3538",City: "Worksop",Name: "Rowan" },{ ID: 9,Phone: "(873) 337-9560",City: "Bad Neuenahr-Ahrweiler",Name: "Kendall" },{ ID: 10,Phone: "(450) 579-0491",City: "MIDdelburg",Name: "Madaline" },{ ID: 11,Phone: "(111) 162-2502",City: "Birecik",Name: "Chandler" },{ ID: 12,parentID: 8,Phone: "(712) 483-3905",City: "Courbevoie",Name: "Craig" },{ ID: 13,Phone: "(872) 499-5833",City: "Cuccaro Vetere",Name: "Basia" },{ ID: 14,parentID: 6,Phone: "(724) 797-0077",City: "Portree",Name: "Elmo" },{ ID: 15,Phone: "(366) 967-0433",City: "Dublin",Name: "Cairo" },{ ID: 16,parentID: 11,Phone: "(147) 708-7321",City: "Rivière-du-Loup",Name: "Mannix" },{ ID: 17,Phone: "(407) 519-9894",City: "Roubaix",Name: "Justine" },{ ID: 18,parentID: 14,Phone: "(938) 793-5446",City: "Eugene",Name: "Dahlia" },{ ID: 19,Phone: "(425) 682-2189",City: "Salisbury",Name: "Irene" },{ ID: 20,parentID: 12,Phone: "(351) 187-8200",City: "Garaguso",Name: "Trevor" },{ ID: 21,Phone: "(601) 944-5214",City: "Pointe-au-Pic",Name: "Iris" },{ ID: 22,parentID: 20,Phone: "(479) 532-6127",City: "Salt Lake City",Name: "Fleur" },{ ID: 23,parentID: 19,Phone: "(339) 973-1695",City: "Meldert",Name: "Hayley" },{ ID: 24,Phone: "(946) 766-1649",City: "Corral",Name: "Baker" },{ ID: 25,Phone: "(964) 413-7033",City: "Joliet",Name: "Leo" },{ ID: 26,parentID: 7,Phone: "(898) 476-0059",City: "Burntisland",Name: "Rigel" },{ ID: 27,parentID: 21,Phone: "(163) 267-0914",City: "Lac Ste. Anne",Name: "Scarlett" },{ ID: 28,parentID: 10,Phone: "(486) 637-9167",City: "San Maurizio Canavese",Name: "Wang" },{ ID: 29,Phone: "(268) 646-0066",City: "Palermo",Name: "Eagan" },{ ID: 30,parentID: 2,Phone: "(641) 756-7073",City: "Harrison Hot Springs",Name: "Hamilton" },{ ID: 31,parentID: 26,Phone: "(820) 709-1328",City: "Ottignies",Name: "Liberty" },{ ID: 32,Phone: "(915) 642-4154",City: "Bihain",Name: "Noel" },{ ID: 33,parentID: 27,Phone: "(137) 830-3127",City: "Kapuskasing",Name: "AIDan" },{ ID: 34,parentID: 31,Phone: "(594) 856-4377",City: "Buin",Name: "Murphy" },{ ID: 35,parentID: 28,Phone: "(951) 871-5461",City: "Gold Coast",Name: "Ila" },{ ID: 36,Phone: "(781) 305-7685",City: "Castel Maggiore",Name: "Katelyn" },{ ID: 37,Phone: "(716) 572-8734",City: "Chapecó",Name: "Logan" },{ ID: 38,Phone: "(214) 619-7252",City: "Stargard Szczeciński",{ ID: 39,Phone: "(422) 223-5912",City: "Bad Vöslau",Name: "Katell" },{ ID: 40,Phone: "(921) 336-7339",City: "Namur",Name: "Lionel" },{ ID: 41,Phone: "(386) 567-5819",City: "Borchtlombeek",Name: "Erin" },{ ID: 42,Phone: "(308) 835-2758",City: "Alto del Carmen",Name: "Austin" },{ ID: 43,Phone: "(410) 695-8540",City: "Saint-Laurent",Name: "Deanna" },{ ID: 44,parentID: 4,Phone: "(287) 866-8953",City: "Fiuminata",Name: "Darius" },{ ID: 45,Phone: "(329) 372-0345",City: "Laurencekirk",Name: "Kelsey" },{ ID: 46,Phone: "(566) 705-6690",City: "Lunel",Name: "Skyler" },{ ID: 47,parentID: 44,Phone: "(779) 411-0381",City: "Pontedera",Name: "Harding" },{ ID: 48,parentID: 18,Phone: "(393) 562-0884",City: "WIDooie",Name: "Marny" },{ ID: 49,Phone: "(299) 937-4358",City: "Zamora",Name: "Brennan" },{ ID: 50,parentID: 35,Phone: "(474) 337-2674",City: "Hazaribag",Name: "Lance" }],tree = getTree(data,undefined,'ID','parentID');

console.log(tree);
.as-console-wrapper { max-height: 100% !important; top: 0; }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-