У меня есть сложный вложенный массив JSON, и я хочу отсортировать его внутри и снаружи уровня, используя itemsortorder
с внешнего уровня и subitemnameorder
с внутреннего уровня.
Мой данный массив ниже
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}
]
}]
}
Избегайте части массива избегания
Ожидал
{
"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
}
]
}
]
Сначала он должен брать из фруктов и соответственно сортировать, затем брать из овощей и следовать
Я пробовал с фильтром и картой, но не работает. Пожалуйста помоги.
Я попробовал ниже функцию, пожалуйста, посмотрите скрипку
@Jack Bashford добавил приятеля, пожалуйста, обратитесь
что ты пробовал?
@Kunal Mukherjee, пожалуйста, посмотрите, что я пробовал
но, не зная имени ключа, как вы собираетесь поддерживать порядок ... "общее" решение не будет следовать этому "Сначала он должен брать из фруктов и соответственно сортировать, а затем брать из овощей"
@arpit Sharma, вы можете опубликовать в качестве ответа? Я буду смотреть в него. Это будет нормально, если использовать ключ. Обновленный вопрос
Я предполагаю, что вы будете назначать json переменной data
, поэтому код выглядит следующим образом:
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;});
}
};
Ваш требуемый массив придет к temp
. Извините, если вы считаете, что код не отформатирован, я пытался сохранить, не учитывая ключи при сортировке.
Вот рабочий пример https://jsfiddle.net/pv2sLejc/
Так же прикрепляю образ консоли
Пожалуйста, сделайте скрипт с вводом и выводом
обновил ответ. Хотя я не ожидаю, что кто-то на SO будет настолько требователен к простой логической замене. В скрипке я использовал вашу собственную скрипку, заменив последние строки
Это массив объектов в вашем выводе, это массив массива. Также данные данные являются объектом. Вы принимаете это как массив. Можете ли вы обновить соответственно?
в этом случае я думаю, что вам может понадобиться перебрать объект JSON
вы кажетесь довольно интересным человеком, вы заставили меня написать полный код, затем вы протестировали, предложили запросы на изменение. Единственное, что осталось, это конвейер доставки, просто шучу :)
Пожалуйста, добавьте ожидаемый результат из опубликованного кода здесь.