假設我們現在有如下的json數據:
但我們想得到如下的樹形結構:
我們可以這樣來操作:
function trans_tree(jsonData){ //temp為臨時對象,將json數據按照id值排序. var result = [], temp = {}, len = jsonData.length for(var i = 0; i < len; i++){ // 以id作為索引存儲元素,可以無需遍歷直接快速定位元素 temp[jsonData[i]['id']] = jsonData[i] } for(var j = 0; j < len; j++){ var list = jsonData[j] // 臨時變量里面的當前元素的父元素,即pid的值,與找對應id值 var sonlist = temp[list['pid']] // 如果存在父元素,即如果有pid屬性 if (sonlist) { // 如果父元素沒有children鍵 if (!sonlist['children']) { // 設上父元素的children鍵 sonlist['children'] = [] } // 給父元素加上當前元素作為子元素 sonlist['children'].push(list) } // 不存在父元素,意味着當前元素是一級元素 else { result.push(list); } } return result; } console.log(trans_tree(_JSON_))
這樣,就得到了我們想要的結果: