编写一个函数 传入名称与json结构 能够输出该名称的所有父节点的信息按从大到小输出

img

从大到小不知道什么意思。。是从根节点-》到给定的节点这样输出?代码大概如下,有帮助或启发麻烦点个采纳【本回答右上角】,谢谢~~有其他问题可以继续交流~

img

    var region = {
        regions: [
            { id: 0, name: '中国', parent_id: -1 },
            { id: 1, name: '安徽', parent_id: 0 },
            { id: 2, name: '江苏', parent_id: 0 },
            { id: 3, name: '合肥', parent_id: 1 },
            { id: 4, name: '庐阳区', parent_id: 2 },
            { id: 5, name: '大杨镇', parent_id: 4 },
            { id: 6, name: '南京', parent_id: 2 },
            { id: 7, name: '玄武区', parent_id: 6 },
        ]
    }
    function getParents(o, name) {
        var item = o.regions.find(i => i.name == name);
        var parents = [item.name];
        do {
            item = o.regions.find(i => i.id == item.parent_id);//找父节点
            if (item) parents.push(item.name);
            else break;//找不到退出循环
        }
        while (true);
        return parents;
    }
    var parents = getParents(region, '大杨镇');
    console.log(parents.reverse().join('-->'))//如果是子节点放到父节点,将.reserve()去掉
    parents = getParents(region, '南京');
    console.log(parents.reverse().join('-->'))

要怎么按从大到小输出?json数据发一下

你题目的解答代码如下:(如有帮助,望采纳!谢谢! 点击我这个回答右上方的【采纳】按钮)

var json = {"regions":[
    {"id":0,"name":"中国","parent_id":-1},
    {"id":1,"name":"安徽","parent_id":0},
    {"id":2,"name":"江苏","parent_id":0},
    {"id":3,"name":"合肥","parent_id":1},
    {"id":4,"name":"庐阳区","parent_id":3},
    {"id":5,"name":"大杨镇","parent_id":4},
    {"id":6,"name":"南京","parent_id":2},
    {"id":7,"name":"玄武区","parent_id":6},
    {"id":8,"name":"梅园新村街道","parent_id":7},
    {"id":9,"name":"上海","parent_id":0},
    {"id":10,"name":"黄浦区","parent_id":9},
    {"id":11,"name":"外滩","parent_id":10},
    {"id":12,"name":"安庆","parent_id":1},
    {"id":13,"name":"徐汇区","parent_id":9},
    {"id":14,"name":"闵行区","parent_id":9},
    {"id":15,"name":"虹梅街道","parent_id":14}
]}

function fun(name,arr) {
    var pt = {};
    var sid;
    var ra = [];
    arr.forEach(function(v, i){
        pt[v.id] = v;
        if (v.name==name)
            sid = v.id;
    });
    //console.log(pt,sid);
    while (sid in pt) {
        ra.unshift(pt[sid].name);
        sid = pt[sid].parent_id;
    }
    return ra;
}

var a = fun("梅园新村街道",json.regions);
console.log(a);

img