测试

by yuezk

JavaScript

/*
已知数组
arr =  [
    {id:1, pid:0},
    {id:2, pid:1},
    {id:3, pid:1},
    {id:4, pid:0},
    {id:5, pid:1}
];
// id为每个成员自己的id,pid为它的父亲的id, pid为0表示没有父亲,即根成员

转成下面的树形式

[
  {
    "id": 1, "pid": 0,
    "members": [
      {
        "id": 2, "pid": 1
      },
      {
        "id": 3, "pid": 1
      },
      {
        "id": 5, "pid": 1
      }
    ]
  },
  {
    "id": 4, "pid": 0,
    "members": []
  }
]
*/
var arr =  [
    {id:1, pid:0},
    {id:2, pid:1},
    {id:3, pid:1},
    {id:4, pid:0},
    {id:5, pid:1}
];
var result = [], cur, hash = {};
for (var i = 0, len = arr.length; i < len; i++) {
    cur = arr[i];
    hash[cur.pid] ? hash[cur.pid].push(cur) : (hash[cur.pid] = [cur]);
}

for (var j = 0; j < hash['0'].length; j++) {
    result.push({
        id: hash['0'][j].id,
        pid: hash['0'][j].pid,
        members: hash[hash['0'][j].id] || []
    });
}

console.log(JSON.stringify(result, null, '\t'));