2015-10-07 184 views
0

我需要重新安排我的JSON數組中的下列方式。在輸出中,我需要id爲重點和對象本身,因爲它的價值。需要重新安排JSON

輸入:

[ 
    { 
     "id": "1", 
     "sub": [ 
      { 
       "id": "1-1", 
       "sub": [ 
        { 
         "id": "1-1-1", 
         "sub": [] 
        } 
       ] 
      }, 
      { 
       "id": "1-2", 
       "sub": [] 
      } 
     ] 
    }, 
    { 
     "id": "2", 
     "sub": [] 
    }, 
    { 
     "id": "3", 
     "sub": [ 
      { 
       "id": "3-1", 
       "sub": [] 
      } 
     ] 
    } 
] 

輸出:

{ 
    "1": { 
     "id": "1", 
     "sub": { 
      "1-1": { 
       "id": "1-1", 
       "sub": { 
        "1-1-1": { 
         "id": "1-1-1", 
         "sub": [] 
        } 
       } 
      }, 
      "1-2": { 
       "id": "1-2", 
       "sub": [] 
      } 
     } 
    }, 
    "2": { 
     "id": "2", 
     "sub": [] 
    }, 
    "3": { 
     "id": "3", 
     "sub": { 
      "3-1": { 
       "id": "3-1", 
       "sub": [] 
      } 
     } 
    } 
} 

我與遞歸嘗試它,但它正在創建循環對象。

function rearrange(obj){ 
    obj[obj.id] = obj; 
    for(var j = 0; j < obj.sub.length; j++){ 
    obj.sub[j][obj.sub[j].id] = obj.sub[j]; 
    if(obj.sub[j].sub.length > 0){ 
     rearrange(obj.sub[j]); 
    } 
    } 
} 

//調用

rearrange(myobj); 
+0

輸出,我建議創建一個新的普通對象並遍歷您的JSON,並在新的對象創建所需的結構而不是試圖「更新」輸入對象。你真的沒有斷裂語句進行遞歸函數 –

回答

2

使用陣列map功能。該map()方法創建調用此陣列中的每個元件上的提供功能的結果的新的數組。

var array = [{ 
 
    "id": "1", 
 
    "sub": [{ 
 
     "id": "1-1", 
 
     "sub": [{ 
 
      "id": "1-1-1", 
 
      "sub": [] 
 
     }] 
 
    }, { 
 
     "id": "1-2", 
 
     "sub": [] 
 
    }] 
 
}, { 
 
    "id": "2", 
 
    "sub": [] 
 
}, { 
 
    "id": "3", 
 
    "sub": [{ 
 
     "id": "3-1", 
 
     "sub": [] 
 
    }] 
 
}]; 
 

 
function doMap(arr) { 
 
    var output = arr.map(function(d) { 
 
     var ob = {}; 
 
     if (d.sub) 
 
      d.sub = doMap(d.sub); 
 
     ob[d.id] = d; 
 
     return ob; 
 
    }); 
 
    return output; 
 
}; 
 

 
alert(JSON.stringify(doMap(array)));

一見鍾情獲得

[{ 
    "1": { 
     "id": "1", 
     "sub": [{ 
      "1-1": { 
       "id": "1-1", 
       "sub": [{ 
        "1-1-1": { 
         "id": "1-1-1", 
         "sub": [] 
        } 
       }] 
      } 
     }, { 
      "1-2": { 
       "id": "1-2", 
       "sub": [] 
      } 
     }] 
    } 
}, { 
    "2": { 
     "id": "2", 
     "sub": [] 
    } 
}, { 
    "3": { 
     "id": "3", 
     "sub": [{ 
      "3-1": { 
       "id": "3-1", 
       "sub": [] 
      } 
     }] 
    } 
}] 
+0

嗨Gilsha,感謝您的回答。在第二級,它創建的對象的鍵爲「未定義」。我之前沒有使用'map',所以我試圖弄明白。 – benjamin54

+0

你好本傑明。我無法重現您提到的問題。我已經添加了一個格式化的輸出到答案。這不是預期的產出嗎?我找不到任何帶有未定義鍵的對象。 – Gilsha