I have a complex nested JSON array and I want to sort it from inside and outside level using itemsortorder
from outside level and subitemnameorder
from.inside level
My given Array below
id:1,
"fruits":[
{
"itemid":1,
"itemname":"Red Fruits",
"itemsortorder":2,
"subitems":[ {"subitemname":"Apple", "subitemnameorder":2},
{"subitemname":"Grapes", "subitemnameorder":1},
{"subitemname":"Berryberry", "subitemnameorder":3}
]
},
{
"itemid":2,
"itemname":"Yellow Fruits",
"itemsortorder":1,
"subitems":[ {"subitemname":"Orange", "subitemnameorder":3},
{"subitemname":"Gua", "subitemnameorder":1},
{"subitemname":"Mango", "subitemnameorder":2}
]
}
],
"Vegetable":[
{
"itemid":3,
"itemname":"Red Veggies",
"itemsortorder":2,
"subitems":[ {"subitemname":"Onion", "subitemnameorder":2},
{"subitemname":"Ginger", "subitemnameorder":1},
{"subitemname":"Carrot", "subitemnameorder":3}
]
},
{
"itemid":4,
"itemname":"Small Veggies",
"itemsortorder":1,
"subitems":[ {"subitemname":"pepper", "subitemnameorder":3},
{"subitemname":"halo", "subitemnameorder":1},
{"subitemname":"good", "subitemnameorder":2}
]
},
{
"itemid":5,
"itemname":"Cool",
"itemsortorder":3,
"subitems":[ {"subitemname":"abc", "subitemnameorder":3},
{"subitemname":"pqr", "subitemnameorder":1},
{"subitemname":"kooi", "subitemnameorder":2}
]
}
],
"avoid":[
{
"itemid":3,
"itemname":"avoid Veggies",
"itemsortorder":2,
"subitems":[ {"subitemname":"Onion", "subitemnameorder":2},
{"subitemname":"Ginger", "subitemnameorder":1},
{"subitemname":"Carrot", "subitemnameorder":3}
]
}]
}
Avoid the avoid array part
Expected
{
"filename":"Yellow Fruits",
"children":[
{
"filename":"Gua",
"subitemnameorder":1
},
{
"filename":"Mango",
"subitemnameorder":2
},
{
"filename":"Orange",
"subitemnameorder":3
}
]
},
{
"filename":"Red Fruits",
"children":[
{
"filename":"Grapes",
"subitemnameorder":1
},
{
"filename":"Apple",
"subitemnameorder":2
},
{
"filename":"Berryberry",
"subitemnameorder":3
}
]
},
,
{
"filename":"Small Veggies",
"children":[
{
"filename":"halo",
"subitemnameorder":1
},
{
"filename":"good",
"subitemnameorder":2
},
{
"filename":"pepper",
"subitemnameorder":3
}
]
},
{
"filename":"Red Veggies",
"children":[
{
"filename":"Ginger",
"subitemnameorder":1
},
{
"filename":"Carrot",
"subitemnameorder":2
},
{
"filename":"Onion",
"subitemnameorder":3
}
]
},
{
"filename":"Cool",
"children":[
{
"filename":"pqr",
"subitemnameorder":1
},
{
"filename":"kooi",
"subitemnameorder":2
},
{
"filename":"abc",
"subitemnameorder":3
}
]
}
]
First it should take from fruits and sort accordingly then take from vegetables and follow
I have tried with filter and map but not working. Please help.
I tried below function pls look fiddle
I assume you will be assigning the json to variable data
so the code follows as below
let keysarr = Object.keys(data);
let temp = [];
for(let i=0;i<keysarr.length;i++){
if(keysarr[i]!=="id" && keysarr[i]!=="avoid"){
let tempsortL1 = data[keysarr[i]].
sort((a,b)=>a.itemsortorder-b.itemsortorder).map((item)=>{
let retObj={};
retObj["filename"] = item.itemname;
retObj["children"]=item.subitems.sort((a,b)=>a.subitemnameorder-b.subitemnameorder);
temp.push(retObj);
return retObj;});
}
};
Your required array will come to temp
. Sorry if you feel code is unformatted I tried to maintain not considering the keys in sorting. Here is the fiddle https://jsfiddle.net/pv2sLejc/ Also attaching the image of console
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.