后台请求获得的json怎么转化成需要的格式

[
    {
        "parentId": 0,
        "resourceId": 100,
        "resourceName": "A"
    },
    {
        "parentId": 100,
        "resourceId": 1001,
        "resourceName": "AA"
    },
    {
        "parentId": 100,
        "resourceId": 1002,
        "resourceName": "AB"
    },
    {
        "parentId": 100,
        "resourceId": 1003,
        "resourceName": "AC"
    },
    {
        "parentId": 0,
        "resourceId": 150,
        "resourceName": "B"
    },
    {
        "parentId": 150,
        "resourceId": 1501,
        "resourceName": "BA"
    },
    {
        "parentId": 150,
        "resourceId": 1502,
        "resourceName": "BB"
    },
    {
        "parentId": 0,
        "resourceId": 200,
        "resourceName": "C"
    }
]

parentId为0为第一级,parentId的值如果等于resourceId的值,则为下一级,以此类推。
想操作成如下格式,望大神指点迷津。

[
    {
        "parentId": 0,
        "resourceId": 100,
        "resourceName": "A",
        " child": [
            {
                "parentId": 100,
                "resourceId": 1001,
                "resourceName": "AA"
            },
            {
                "parentId": 100,
                "resourceId": 1002,
                "resourceName": "AB"
            },
            {
                "parentId": 100,
                "resourceId": 1003,
                "resourceName": "AC"
            }
        ]
    },
    {
        "parentId": 0,
        "resourceId": 150,
        "resourceName": "B",
        "child": [
            {
                "parentId": 150,
                "resourceId": 1501,
                "resourceName": "BA"
            },
            {
                "parentId": 150,
                "resourceId": 1502,
                "resourceName": "BB"
            }
        ]
    },
    {
        "parentId": 0,
        "resourceId": 200,
        "resourceName": "C"
    }
]
阅读 5.4k
10 个回答

总体思路:从数组中的filter出符合条件的,重新构建一个新的object。

再或者,可以看看这个jq插件

能不能用js遍历去操作

这种事让后台整理好再传过来

标准的递归,临接表构建树。不断搜索当前节点是否有子节点,找到就加到children里面。深度优先或者广度优先均可。

这种事情一般不都是后端处理的么,数据量大的话前端处理还是有局限性的

能让后端处理好就让后端做

这种需求遇到过很多数据抽丝剥茧重新定义一个对象for循环七八层判断一堆然后ok

这种工作需求一般都是后端同学帮忙处理的,毕竟数据量大的话再放到前端来做遍历过滤,有局限性。
前端实现的话就是定义一个filter过滤器,循环遍历根据自己的需求生成一个新的object对象。

思路:1、关联数据,2、找最顶层

var d = [
    {"parentId": 0,"resourceId": 100,"resourceName": "A"},
    {"parentId": 100,"resourceId": 1001,"resourceName": "AA"},
    {"parentId": 100,"resourceId": 1002,"resourceName": "AB"},
    {"parentId": 100,"resourceId": 1003,"resourceName": "AC"},
    {"parentId": 0,"resourceId": 150,"resourceName": "B"},
    {"parentId": 150,"resourceId": 1501,"resourceName": "BA"},
    {"parentId": 150,"resourceId": 1502,"resourceName": "BB"},
    {"parentId": 0,"resourceId": 200,"resourceName": "C"}
];
var r = [];
for(var i in d){//子集
    var isparent = true;
    for(var c in d){//父集
        if(d[c].resourceId == d[i].parentId){
            if(!d[c].child){
                d[c].child = [];
            }
            d[c].child.push(d[i]);
            isparent = false;
            break;
        }
    }
    if(isparent){
        r.push(d[i]);
    }

}
console.log(d);
console.log(r);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题