具有父ID的分层json到flat

时间:2016-09-04 18:05:57

标签: javascript json

我有Hierarchical JSON,想要在没有父子的情况下转换为平面JSON。

vm.str = [
    {
        "s_gid": 0,
        "title": "scholastic Master List 2016",
        "nodes": [
            {
                "Id": "1",
                "templateId": "1",
                "s_gid": "10",
                "m_s_p_id": "1",
                "subject_group_name": "xxxxxxx",
                "parent_id": "1",
                "sname": "",
                "nodes": [
                    {
                        "Id": "2",
                        "templateId": "1",
                        "s_gid": "100",
                        "m_s_p_id": "0",
                        "subject_group_name": "abc",
                        "parent_id": "10",
                        "sname": "",
                        "nodes": [
                            {
                                "Id": "3",
                                "templateId": "1",
                                "s_gid": "1000",
                                "m_s_p_id": "0",
                                "subject_group_name": "efg",
                                "parent_id": "100",
                                "sname": ""
                            }
                        ]
                    }
                ]
            }
        ]
    }
]

什么转换为新的vm.str2 = []为平面,所有节点在同一级别没有节点...子节点..

2 个答案:

答案 0 :(得分:0)

您可以使用Array.prototype.reduce()加递归执行此任务:

function getNodes(inputArr) {
    return inputArr.reduce(function (prev, value) {
        return prev.concat(
            [ value ],
            (value.nodes ? getNodes(value.nodes) : [])
        );
    }, []);
}

如果您仍想删除nodes,则可以使用Array.prototype.map甚至Array.prototype.each

output = output.map(function (value) {
    value.nodes = undefined;

    return value;
});

答案 1 :(得分:0)

您可以使用递归函数返回一个对象数组

var arr =[{"s_gid":0,"title":"scholastic Master List 2016","nodes":[{"Id":"1","templateId":"1","s_gid":"10","m_s_p_id":"1","subject_group_name":"xxxxxxx","parent_id":"1","sname":"","nodes":[{"Id":"2","templateId":"1","s_gid":"100","m_s_p_id":"0","subject_group_name":"abc","parent_id":"10","sname":"","nodes":[{"Id":"3","templateId":"1","s_gid":"1000","m_s_p_id":"0","subject_group_name":"efg","parent_id":"100","sname":""}]}]}]}]

function flatten(data) {
  var result = [];
  data.forEach(function(o) {
    var obj = {}
    for(var e in o) {
      (Array.isArray(o[e])) ? result.push(...flatten(o[e])) : obj[e] = o[e];
    }
    result.push(obj)
  })
  return result;
}

console.log(flatten(arr))