Сортировка сложного вложенного массива JSON с использованием порядка

У меня есть сложный вложенный массив 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
         }
      ]
   }
   ]

Сначала он должен брать из фруктов и соответственно сортировать, затем брать из овощей и следовать

Я пробовал с фильтром и картой, но не работает. Пожалуйста помоги.

Я попробовал ниже функцию, пожалуйста, посмотрите скрипку

https://jsfiddle.net/qb2pueg7

Пожалуйста, добавьте ожидаемый результат из опубликованного кода здесь.

Jack Bashford 08.04.2019 11:38

@Jack Bashford добавил приятеля, пожалуйста, обратитесь

androidGenX 08.04.2019 11:53

что ты пробовал?

Kunal Mukherjee 08.04.2019 11:54

@Kunal Mukherjee, пожалуйста, посмотрите, что я пробовал

androidGenX 08.04.2019 12:05

но, не зная имени ключа, как вы собираетесь поддерживать порядок ... "общее" решение не будет следовать этому "Сначала он должен брать из фруктов и соответственно сортировать, а затем брать из овощей"

arpit sharma 08.04.2019 12:39

@arpit Sharma, вы можете опубликовать в качестве ответа? Я буду смотреть в него. Это будет нормально, если использовать ключ. Обновленный вопрос

androidGenX 08.04.2019 12:49
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
6
109
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я предполагаю, что вы будете назначать 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/ Так же прикрепляю образ консоли

Пожалуйста, сделайте скрипт с вводом и выводом

androidGenX 08.04.2019 13:33

обновил ответ. Хотя я не ожидаю, что кто-то на SO будет настолько требователен к простой логической замене. В скрипке я использовал вашу собственную скрипку, заменив последние строки

arpit sharma 08.04.2019 13:44

Это массив объектов в вашем выводе, это массив массива. Также данные данные являются объектом. Вы принимаете это как массив. Можете ли вы обновить соответственно?

androidGenX 08.04.2019 15:22

в этом случае я думаю, что вам может понадобиться перебрать объект JSON

androidGenX 08.04.2019 15:32

вы кажетесь довольно интересным человеком, вы заставили меня написать полный код, затем вы протестировали, предложили запросы на изменение. Единственное, что осталось, это конвейер доставки, просто шучу :)

arpit sharma 08.04.2019 15:49

Другие вопросы по теме