2016-03-07 93 views
0

我有層次結構json。我想把它弄平。 這是我的JSON:Javascript lodash拼合分層對象

{ 
    "id": "111", 
    "name": "v5", 
    "define": { 
    "system": "abc", 
    "concept": [{ 
     "code": "y7", 
     "concept": [{ 
     "code": "AGG", 
     "display": "Abcess" 
     }, { 
     "code": "ABS", 
     "display": "Abcess" 
     }] 
    }, { 
     "code": "y8", 
     "concept": [{ 
     "code": "AGc", 
     "display": "ccc" 
     }, { 
     "code": "hjj", 
     "display": "uii" 
     }] 
    }] 
    } 
} 

是否有lodash的方式,扁平化JSON這一隻「代碼,顯示」的陣列?

如果否,是否有另一個庫可以做到這一點? 謝謝。

例如結果:

[{ 
    "code": "AGG", 
    "display": "Abcess" 
}, { 
    "code": "ABS", 
    "display": "Abcess" 
}, { 
    "code": "AGc", 
    "display": "ccc" 
}, { 
    "code": "hjj", 
    "display": "uii" 
}] 
+1

「如果沒有,有沒有可以做其他圖書館?」。在堆棧溢出時不允許請求場外資源。 – Ivar

回答

1

有沒有辦法在lodash,拉平此JSON只有 「代碼, desplay」 的陣列?

您的意思是連結所有concept孩子?

試試這個

var obj = { 
 
    "id": "111", 
 
    "name": "v5", 
 
    "define": { 
 
    "system": "abc", 
 
    "concept": [{ 
 
     "code": "y7", 
 
     "concept": [{ 
 
     "code": "AGG", 
 
     "display": "Abcess" 
 
     }, { 
 
     "code": "ABS", 
 
     "display": "Abcess" 
 
     }] 
 
    }, { 
 
     "code": "y8", 
 
     "concept": [{ 
 
     "code": "AGc", 
 
     "display": "ccc" 
 
     }, { 
 
     "code": "hjj", 
 
     "display": "uii" 
 
     }] 
 
    }] 
 
    } 
 
} 
 

 
var output = []; 
 

 
obj.define.concept.forEach(function(o) { 
 
    output = output.concat(o.concept) 
 
}); 
 

 
document.write("<pre>" + JSON.stringify(output, 0, 4) + "</pre>");

1

Array#forEach()一個解決方案。

var data = { "id": "111", "name": "v5", "define": { "system": "abc", "concept": [{ "code": "y7", "concept": [{ "code": "AGG", "display": "Abcess" }, { "code": "ABS", "display": "Abcess" }] }, { "code": "y8", "concept": [{ "code": "AGc", "display": "ccc" }, { "code": "hjj", "display": "uii" }] }] } }, 
 
    flat = function (array) { 
 
     var r = []; 
 
     array.forEach(function (a) { 
 
      a.concept.forEach(function (b) { 
 
       r.push(b); 
 
      }); 
 
     }); 
 
     return r; 
 
    }(data.define.concept); 
 

 
document.write('<pre>' + JSON.stringify(flat, 0, 4) + '</pre>');