[英]How to join/merge json result
為了減少發送給客戶端的有效負載,我的rest api僅返回如下所示的子實體的ID:
[
{
"id":369,
"name":"Harlequin Enterprises Ltd",
"description":"Buford Konopelski",
"parent":{
"id":323
}
},
{
"id":323,
"name":"Heyday Books",
"description":"Zola Rutherford",
"parent":{
"id":3
}
},
{
"id":3,
"name":"Happy House",
"description":"Mrs. Dwight Mohr",
"parent":{
"id":null
}
}
]
是否有任何圖書館可以幫助我加入/合並所有實體:
[
{
"id":369,
"name":"Harlequin Enterprises Ltd",
"description":"Buford Konopelski",
"parent":{
"id":323,
"name":"Heyday Books",
"description":"Zola Rutherford",
"parent":{
"id":3,
"name":"Happy House",
"description":"Mrs. Dwight Mohr",
"parent":{
"id":null
}
}
}
},
{
"id":323,
"name":"Heyday Books",
"description":"Zola Rutherford",
"parent":{
"id":3,
"name":"Happy House",
"description":"Mrs. Dwight Mohr",
"parent":{
"id":null
}
}
},
{
"id":3,
"name":"Happy House",
"description":"Mrs. Dwight Mohr",
"parent":{
"id":null
}
}
]
//這是從IVO GELOV解決方案得到啟發的簡化解決方案:
var mapID = inputJSON.map((item) => item.id);
// attach parents to childreen
var normalized = inputJSON.map((item) =>
{
var parentIndex = mapID.indexOf(item.parent.id);
item.parent = inputJSON[parentIndex];
return item;
});
console.log(JSON.stringify(normalized))
您必須使用地圖
var inputJSON, mapID = {};
// create the map - allowing to get an item by ID
inputJSON.forEach((item) =>
{
mapID[item.id] = item;
});
// attach parents to childreen
inputJSON.forEach((item) =>
{
if(item.parent && item.parent.id && mapID[item.parent.id])
{
item.parent = mapID[item.parent.id]
}
});
您可以遞歸執行此操作,但是您必須介意性能(是否需要)。
var arr = [{ "id": 369, "name": "Harlequin Enterprises Ltd", "description": "Buford Konopelski", "parent": { "id": 323 } }, { "id": 323, "name": "Heyday Books", "description": "Zola Rutherford", "parent": { "id": 3 } }, { "id": 3, "name": "Happy House", "description": "Mrs. Dwight Mohr", "parent": { "id": null } } ]; function findId(a, id) { var elem = null; a.forEach((element) => { if (element.id === id) { elem = JSON.parse(JSON.stringify(element)); if (null !== element.parent.id) { var parentElem = findId(a, element.parent.id); elem.parent = JSON.parse(JSON.stringify(parentElem)); } } }); return elem; } var newArr = []; arr.forEach((element) => { var elem = findId(arr, element.id); newArr.push(elem); }); console.log(newArr);
您可以使用for循環來處理
var final_Array = [];
var data = [
{
"id":369,
"name":"Harlequin Enterprises Ltd",
"description":"Buford Konopelski",
"parent":{
"id":323
}
},
{
"id":323,
"name":"Heyday Books",
"description":"Zola Rutherford",
"parent":{
"id":3
}
},
{
"id":3,
"name":"Happy House",
"description":"Mrs. Dwight Mohr",
"parent":{
"id":null
}
}
]
for(var i=0;i<data.length;i++){
var f = 0;
for(var j=0;j<data.length;j++){
if(data[i].parent.id==data[j].id){
var r = {
"id":data[i].id,
"name":data[i].name,
"description":data[i].description,
"parent":data[j]
}
final_Array.push(r);
}
else if(data[i].parent.id==null){
f++;
}
}
if(j==f){
var r = {
"id":data[i].id,
"name":data[i].name,
"description":data[i].description,
"parent":data[i].parent
}
final_Array.push(r);
}
}
if(i==data.length){
console.log(final_Array);
}
希望這可以幫助
您可以使用Array.forEach
進行迭代,並使用Array.reduce
基於parent
鍵構造每個對象。
var arr = [ { "id":369, "name":"Harlequin Enterprises Ltd", "description":"Buford Konopelski", "parent":{ "id":323 } }, { "id":323, "name":"Heyday Books", "description":"Zola Rutherford", "parent":{ "id":3 } }, { "id":3, "name":"Happy House", "description":"Mrs. Dwight Mohr", "parent":{ "id":null } } ]; arr.forEach(obj => { obj = arr.reduce(acc => { var parent=acc.parent; while(parent.parent) parent=parent.parent; if(parent.id) { Object.assign(parent, arr.find(function(o){return o.id==parent.id})); } return acc; }) }); console.log(arr)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.