Отображение всех значений вложенного json с использованием lodash

Я пытаюсь показать все значения JSON, которые у меня есть, используя lodash, и я читал, что он лучше всего подходит для таких ситуаций, как вы можете видеть, json глубокий, а некоторые категории пусты, что усложнило мне задачу, мне интересно, какая функция больше всего подходит для отображения такого неструктурированного и глубокого JSON. это foreach или фильтр? и является ли lodash лучшим вариантом здесь? данные в конечном итоге будут отображаться в приложении для реагирования, но сейчас я пытаюсь выполнить сопоставление / foreach / фильтр или что-то еще, что может динамически проходить через все элементы.

Ожидаемый результат — вложенное дерево элементов списка.

  • {
    
      "name": "Menu",
      "children": [
        {
          "type": "category",
          "name": "Burgers",
          "children": [
            {
              "type": "item",
              "name": "Burger 1",
              "children": [
                {
                  "type": "modifier",
                  "name": "Promo",
                  "children": [
                    {
                      "type": "item",
                      "name": "Promo 1"
                    }
                  ]
                },
                {
                  "type": "group",
                  "name": "Drinks",
                  "children": [
                    {
                      "type": "item",
                      "name": "Coke"
                    },
                    {
                      "type": "item",
                      "name": "Light Coke"
                    },
                    {
                      "type": "item",
                      "name": "Sprite"
                    },
                    {
                      "type": "item",
                      "name": "Fanta"
                    }
                  ]
                },
                {
                  "type": "modifier",
                  "name": "Without",
                  "children": [
                    {
                      "type": "ingredient",
                      "name": "Onion"
                    },
                    {
                      "type": "ingredient",
                      "name": "Tomato"
                    },
                    {
                      "type": "ingredient",
                      "name": "Pickles"
                    }
                  ]
                }
              ]
            },
            {
              "type": "item",
              "name": "Burger 2",
              "children": [
                {
                  "type": "modifier",
                  "name": "Promo",
                  "children": [
                    {
                      "type": "item",
                      "name": "Promo 1"
                    }
                  ]
                },
                {
                  "type": "group",
                  "name": "Drinks",
                  "children": [
                    {
                      "type": "item",
                      "name": "Coke"
                    },
                    {
                      "type": "item",
                      "name": "Light Coke"
                    },
                    {
                      "type": "item",
                      "name": "Sprite"
                    },
                    {
                      "type": "item",
                      "name": "Fanta"
                    }
                  ]
                },
                {
                  "type": "modifier",
                  "name": "Without",
                  "children": [
                    {
                      "type": "ingredient",
                      "name": "Onion"
                    },
                    {
                      "type": "ingredient",
                      "name": "Tomato"
                    },
                    {
                      "type": "ingredient",
                      "name": "Pickles"
                    }
                  ]
                }
              ]
            },
            {
              "type": "item",
              "name": "Coming Soon Offers"
            }
          ]
        },
        {
          "type": "category",
          "name": "Pizzas",
          "children": [
            {
              "type": "item",
              "name": "Pizza 1",
              "children": [
                {
                  "type": "modifier",
                  "name": "Promo",
                  "children": [
                    {
                      "type": "item",
                      "name": "Promo 1"
                    }
                  ]
                },
                {
                  "type": "group",
                  "name": "Drinks",
                  "children": [
                    {
                      "type": "item",
                      "name": "Coke"
                    },
                    {
                      "type": "item",
                      "name": "Light Coke"
                    },
                    {
                      "type": "item",
                      "name": "Sprite"
                    },
                    {
                      "type": "item",
                      "name": "Fanta"
                    }
                  ]
                },
                {
                  "type": "modifier",
                  "name": "Without",
                  "children": [
                    {
                      "type": "ingredient",
                      "name": "Onion"
                    },
                    {
                      "type": "ingredient",
                      "name": "Mashrooms"
                    },
                    {
                      "type": "ingredient",
                      "name": "Olives"
                    }
                  ]
                }
              ]
            },
            {
              "type": "item",
              "name": "Pizza 2",
              "children": [
                {
                  "type": "modifier",
                  "name": "Promo",
                  "children": [
                    {
                      "type": "item",
                      "name": "Promo 1"
                    }
                  ]
                },
                {
                  "type": "group",
                  "name": "Drinks",
                  "children": [
                    {
                      "type": "item",
                      "name": "Coke"
                    },
                    {
                      "type": "item",
                      "name": "Light Coke"
                    },
                    {
                      "type": "item",
                      "name": "Sprite"
                    },
                    {
                      "type": "item",
                      "name": "Fanta"
                    }
                  ]
                },
                {
                  "type": "modifier",
                  "name": "Without",
                  "children": [
                    {
                      "type": "ingredient",
                      "name": "Onion"
                    },
                    {
                      "type": "ingredient",
                      "name": "Mashrooms"
                    },
                    {
                      "type": "ingredient",
                      "name": "Olives"
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
    
  • Пожалуйста, сообщите ожидаемый результат или его часть

    Maheer Ali 07.03.2019 06:04

    какой ожидаемый результат?

    Harish 07.03.2019 06:04

    Элементы списка <li> @Harish

    AlxL 07.03.2019 06:06

    Элементы списка <li> @MaheerAli

    AlxL 07.03.2019 06:07

    @AlxL Вы хотите отобразить вложенное дерево или просто все в <li>?

    Maheer Ali 07.03.2019 06:11

    Показать вложенное дерево

    AlxL 07.03.2019 06:18

    @AlxL Я дал ответ, посмотри, работает ли он

    Maheer Ali 07.03.2019 06:29
    Поведение ключевого слова "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) для оценки ваших знаний,...
    3
    7
    56
    2
    Перейти к ответу Данный вопрос помечен как решенный

    Ответы 2

    Вот способ без лодаша.

    const buildMenu = (data) => {
      let ul = document.createElement('ul');
      data.children.forEach(i => {
        let li = document.createElement('li');
        li.innerText = i.name;
        li.className = i.type;
        if (i.children) li.appendChild(buildMenu(i));
        ul.appendChild(li);
      });
    
      return ul;
    };
    
    let data = {
    
      "name": "Menu",
      "children": [{
          "type": "category",
          "name": "Burgers",
          "children": [{
              "type": "item",
              "name": "Burger 1",
              "children": [{
                  "type": "modifier",
                  "name": "Promo",
                  "children": [{
                    "type": "item",
                    "name": "Promo 1"
                  }]
                },
                {
                  "type": "group",
                  "name": "Drinks",
                  "children": [{
                      "type": "item",
                      "name": "Coke"
                    },
                    {
                      "type": "item",
                      "name": "Light Coke"
                    },
                    {
                      "type": "item",
                      "name": "Sprite"
                    },
                    {
                      "type": "item",
                      "name": "Fanta"
                    }
                  ]
                },
                {
                  "type": "modifier",
                  "name": "Without",
                  "children": [{
                      "type": "ingredient",
                      "name": "Onion"
                    },
                    {
                      "type": "ingredient",
                      "name": "Tomato"
                    },
                    {
                      "type": "ingredient",
                      "name": "Pickles"
                    }
                  ]
                }
              ]
            },
            {
              "type": "item",
              "name": "Burger 2",
              "children": [{
                  "type": "modifier",
                  "name": "Promo",
                  "children": [{
                    "type": "item",
                    "name": "Promo 1"
                  }]
                },
                {
                  "type": "group",
                  "name": "Drinks",
                  "children": [{
                      "type": "item",
                      "name": "Coke"
                    },
                    {
                      "type": "item",
                      "name": "Light Coke"
                    },
                    {
                      "type": "item",
                      "name": "Sprite"
                    },
                    {
                      "type": "item",
                      "name": "Fanta"
                    }
                  ]
                },
                {
                  "type": "modifier",
                  "name": "Without",
                  "children": [{
                      "type": "ingredient",
                      "name": "Onion"
                    },
                    {
                      "type": "ingredient",
                      "name": "Tomato"
                    },
                    {
                      "type": "ingredient",
                      "name": "Pickles"
                    }
                  ]
                }
              ]
            },
            {
              "type": "item",
              "name": "Coming Soon Offers"
            }
          ]
        },
        {
          "type": "category",
          "name": "Pizzas",
          "children": [{
              "type": "item",
              "name": "Pizza 1",
              "children": [{
                  "type": "modifier",
                  "name": "Promo",
                  "children": [{
                    "type": "item",
                    "name": "Promo 1"
                  }]
                },
                {
                  "type": "group",
                  "name": "Drinks",
                  "children": [{
                      "type": "item",
                      "name": "Coke"
                    },
                    {
                      "type": "item",
                      "name": "Light Coke"
                    },
                    {
                      "type": "item",
                      "name": "Sprite"
                    },
                    {
                      "type": "item",
                      "name": "Fanta"
                    }
                  ]
                },
                {
                  "type": "modifier",
                  "name": "Without",
                  "children": [{
                      "type": "ingredient",
                      "name": "Onion"
                    },
                    {
                      "type": "ingredient",
                      "name": "Mashrooms"
                    },
                    {
                      "type": "ingredient",
                      "name": "Olives"
                    }
                  ]
                }
              ]
            },
            {
              "type": "item",
              "name": "Pizza 2",
              "children": [{
                  "type": "modifier",
                  "name": "Promo",
                  "children": [{
                    "type": "item",
                    "name": "Promo 1"
                  }]
                },
                {
                  "type": "group",
                  "name": "Drinks",
                  "children": [{
                      "type": "item",
                      "name": "Coke"
                    },
                    {
                      "type": "item",
                      "name": "Light Coke"
                    },
                    {
                      "type": "item",
                      "name": "Sprite"
                    },
                    {
                      "type": "item",
                      "name": "Fanta"
                    }
                  ]
                },
                {
                  "type": "modifier",
                  "name": "Without",
                  "children": [{
                      "type": "ingredient",
                      "name": "Onion"
                    },
                    {
                      "type": "ingredient",
                      "name": "Mashrooms"
                    },
                    {
                      "type": "ingredient",
                      "name": "Olives"
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    };
    
    document.body.appendChild(buildMenu(data));
    Ответ принят как подходящий

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

    let obj = {
      "name": "Menu",
      "children": [
        {
          "type": "category",
          "name": "Burgers",
          "children": [
            {
              "type": "item",
              "name": "Burger 1",
              "children": [
                {
                  "type": "modifier",
                  "name": "Promo",
                  "children": [
                    {
                      "type": "item",
                      "name": "Promo 1"
                    }
                  ]
                },
                {
                  "type": "group",
                  "name": "Drinks",
                  "children": [
                    {
                      "type": "item",
                      "name": "Coke"
                    },
                    {
                      "type": "item",
                      "name": "Light Coke"
                    },
                    {
                      "type": "item",
                      "name": "Sprite"
                    },
                    {
                      "type": "item",
                      "name": "Fanta"
                    }
                  ]
                },
                {
                  "type": "modifier",
                  "name": "Without",
                  "children": [
                    {
                      "type": "ingredient",
                      "name": "Onion"
                    },
                    {
                      "type": "ingredient",
                      "name": "Tomato"
                    },
                    {
                      "type": "ingredient",
                      "name": "Pickles"
                    }
                  ]
                }
              ]
            },
            {
              "type": "item",
              "name": "Burger 2",
              "children": [
                {
                  "type": "modifier",
                  "name": "Promo",
                  "children": [
                    {
                      "type": "item",
                      "name": "Promo 1"
                    }
                  ]
                },
                {
                  "type": "group",
                  "name": "Drinks",
                  "children": [
                    {
                      "type": "item",
                      "name": "Coke"
                    },
                    {
                      "type": "item",
                      "name": "Light Coke"
                    },
                    {
                      "type": "item",
                      "name": "Sprite"
                    },
                    {
                      "type": "item",
                      "name": "Fanta"
                    }
                  ]
                },
                {
                  "type": "modifier",
                  "name": "Without",
                  "children": [
                    {
                      "type": "ingredient",
                      "name": "Onion"
                    },
                    {
                      "type": "ingredient",
                      "name": "Tomato"
                    },
                    {
                      "type": "ingredient",
                      "name": "Pickles"
                    }
                  ]
                }
              ]
            },
            {
              "type": "item",
              "name": "Coming Soon Offers"
            }
          ]
        },
        {
          "type": "category",
          "name": "Pizzas",
          "children": [
            {
              "type": "item",
              "name": "Pizza 1",
              "children": [
                {
                  "type": "modifier",
                  "name": "Promo",
                  "children": [
                    {
                      "type": "item",
                      "name": "Promo 1"
                    }
                  ]
                },
                {
                  "type": "group",
                  "name": "Drinks",
                  "children": [
                    {
                      "type": "item",
                      "name": "Coke"
                    },
                    {
                      "type": "item",
                      "name": "Light Coke"
                    },
                    {
                      "type": "item",
                      "name": "Sprite"
                    },
                    {
                      "type": "item",
                      "name": "Fanta"
                    }
                  ]
                },
                {
                  "type": "modifier",
                  "name": "Without",
                  "children": [
                    {
                      "type": "ingredient",
                      "name": "Onion"
                    },
                    {
                      "type": "ingredient",
                      "name": "Mashrooms"
                    },
                    {
                      "type": "ingredient",
                      "name": "Olives"
                    }
                  ]
                }
              ]
            },
            {
              "type": "item",
              "name": "Pizza 2",
              "children": [
                {
                  "type": "modifier",
                  "name": "Promo",
                  "children": [
                    {
                      "type": "item",
                      "name": "Promo 1"
                    }
                  ]
                },
                {
                  "type": "group",
                  "name": "Drinks",
                  "children": [
                    {
                      "type": "item",
                      "name": "Coke"
                    },
                    {
                      "type": "item",
                      "name": "Light Coke"
                    },
                    {
                      "type": "item",
                      "name": "Sprite"
                    },
                    {
                      "type": "item",
                      "name": "Fanta"
                    }
                  ]
                },
                {
                  "type": "modifier",
                  "name": "Without",
                  "children": [
                    {
                      "type": "ingredient",
                      "name": "Onion"
                    },
                    {
                      "type": "ingredient",
                      "name": "Mashrooms"
                    },
                    {
                      "type": "ingredient",
                      "name": "Olives"
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
    let body = document.querySelector('body');
    function print(obj){
      let str = `<li>${obj.name}</li>`;
      if (obj.children){
        str += '<ul>' 
        for(let c of obj.children) str += print(c)
        str += '</ul>'
      }
      return str;
    }
    document.body.innerHTML = print(obj);

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