根据这样的数据[
  {
    "id" : "01",
    "pId":""
  }  ,
    {
    "id" : "01_01",
    "pId":"01"
  }  ,
    {
    "id" : "01_02",
    "pId":"01"
  }  ,
      {
    "id" : "01_02_01",
    "pId":"01_02"
  }  ,
  {
    "id" : "02",
    "pId":""
  },
    {
    "id" : "02-01",
    "pId":"02"
  },
      {
    "id" : "02-02",
    "pId":"02"
  },
  {
    "id" : "03",
    "pId":""
  },
  {
    "id" : "03_01",
    "pId":"03"
  }
]
生成以下类型的数据
[
  {
    "id": "01",
    "pId": "",
    "childer":[
        {
          "id": "01_01",
          "pId": "01",
          "childer":[]
        },
        {
          "id": "01_02",
          "pId": "01",
          "childer":[
            {
                "id": "01_02_01",
                "pId": "01_02",
                "childer":[]
              }
            ]
       },
    ]
  },
  {
    "id": "02",
    "pId": "",
    "childer":[
       {
    "id": "02-01",
    "pId": "02",
    "childer":[]
  },
  {
    "id": "02-02",
    "pId": "02",
    "childer":[]
  },
  ]   {
    "id": "03",
    "pId": "",
    "childer":[
       {
    "id": "03_01",
    "pId": "03",
     "childer":[]
  }
      ]
  }
 
]

解决方案 »

  1.   


    var json = [
      {
        "id" : "01",
        "pId":""
      }  ,
        {
        "id" : "01_01",
        "pId":"01"
      }  ,
        {
        "id" : "01_02",
        "pId":"01"
      }  ,
          {
        "id" : "01_02_01",
        "pId":"01_02"
      }  ,
      {
        "id" : "02",
        "pId":""
      },
        {
        "id" : "02-01",
        "pId":"02"
      },
          {
        "id" : "02-02",
        "pId":"02"
      },
      {
        "id" : "03",
        "pId":""
      },
      {
        "id" : "03_01",
        "pId":"03"
      }
    ];
    function format(json){
    var ret = [], o = {}; function add(arr, data){
    var obj = {
    "id": data.id,
    "pId": data.pId,
    "childer": []
    };
    o[data.id] = obj;
    arr.push(obj);
    } json.forEach(x => {
    if(o[x.pId]){
    add(o[x.pId].childer, x);
    }else{
    add(ret, x);
    }
    }); return ret;
    }
    console.log(format(json));