JavaScript扁平化树形结构的json对象

871 阅读1分钟

原数据:

[
  {
    'name': '第一层1',
    'pid': '0',
    'id': '11',
    'children': [
      {
        'name': '第一层1第二层1',
        'pid': '11',
        'id': '111',
        'children': [
          {
            'name': '第一层1第二层2第三层1',
            'pid': '111',
            'id': '1111'
          },
          {
            'name': '第一层1第二层2第三层2',
            'pid': '111',
            'id': '1112'
          }
        ]
      },
      {
        'name': '第一层1第二层2',
        'pid': '11',
        'id': '112'
      },
      {
        'name': '第一层1第二层3',
        'pid': '11',
        'id': '113'
      }
    ]
  },
  {
    'name': '第一层2',
    'pid': '0',
    'id': '12',
    'children': [
      {
        'name': '第一层2第二层1',
        'pid': '12',
        'id': '121'
      },
      {
        'name': '第一层2第二层2',
        'pid': '12',
        'id': '122'
      }
    ]
  }
]

方法封装:

function flatten (data, level = 0) {
  return data.reduce((arr, { name, pid, id, children = []}) =>
    arr.concat([{ name, pid, id, level}], flatten(children, level + 1)), [])
}

处理后的数据:

[
    {"name":"第一层1","pid":"0","id":"11","level":0},
    {"name":"第一层1第二层1","pid":"11","id":"111","level":1},
    {"name":"第一层1第二层1第三层1","pid":"111","id":"1111","level":2},
    {"name":"第一层1第二层1第三层2","pid":"111","id":"1112","level":2},
    {"name":"第一层1第二层2","pid":"11","id":"112","level":1},
    {"name":"第一层1第二层3","pid":"11","id":"113","level":1},
    {"name":"第一层2","pid":"0","id":"12","level":0},
    {"name":"第一层2第二层1","pid":"12","id":"121","level":1},
    {"name":"第一层2第二层2","pid":"12","id":"122","level":1}
]