Как реструктурировать данное дерево json для вывода в javascript

У меня есть файл JSON с определенной структурой (см. Дерево), но мне нужно, чтобы он также был структурирован как ожидаемый результат.

Можно ли реорганизовать данные в JS? Если да, то как вы это делаете? Мне нужна помощь в реструктуризации или сопоставлении дерева с ожидаемым результатом. Я надеюсь, что вы, ребята, можете помочь мне с этой проблемой реструктуризации.

const tree = [
      {
        "type": "object", 
        "name": "pets",
        "child": 
        [
          {
            type: "array",
            name: "properties",
            "child": 
            [
              {
                type: "object",
                name: "PK",
              },
              {
                type: "object",
                name: "PO",
              },
              {
                type: "object",
                name: "PS",
              },
              {
                type: "object",
                name: "PA",
                child: [{type: "array", name: "list"}, ]
              },
            ]
          },
          {
            type: "object",
            name: "get",
          }
        ]
      },
    ]
const expectedResult = [
  {
    pets: 
    {
      properties: 
      [
        {
          name: "PK"
        }, 
        {
          name: "PO"
        }, 
        {
          name: "PS"
        }, 
        {
          "PA" : 
          {
            list: []
          }
        }
      ],
      get: {}
    }
  },
]

Всегда ли tree является массивом? Или всегда массив с одним объектом в нем?

Amir 23.04.2022 09:38

Да, дерево всегда будет массивом объектов,

shahzaib 23.04.2022 09:41
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Сравнение структур данных: Массивы и объекты в Javascript
Сравнение структур данных: Массивы и объекты в Javascript
Итак, вы изучили основы JavaScript и хотите перейти к изучению структур данных. Мотивация для изучения/понимания Структур данных может быть разной,...
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Прошлая статья была первой из цикла статей о создании системы электронной коммерции с использованием Keystone.js, и она была посвящена главным образом...
Приложение для отслеживания бюджета на React js для начинающих
Приложение для отслеживания бюджета на React js для начинающих
Обучение на практике - это проверенная тема для достижения успеха в любой области. Если вы знаете контекст фразы "Практика делает человека...
Стоит ли использовать React в 2022 году?
Стоит ли использовать React в 2022 году?
В 2022 году мы все слышим о трендах фронтенда (React, Vue), но мы не знаем, почему мы должны использовать эти фреймворки, когда их использовать, а...
0
2
38
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

  1. Разберите ваши данные json

https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse

  1. Сопоставьте данные в соответствии с вашими потребностями

https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Array/map

(или прокрутите его, как вам удобно)

Привет, сэр, можно ли привести пример ??

shahzaib 23.04.2022 10:03
Ответ принят как подходящий

Вы можете взять объект для различных типов и их функций, чтобы создать нужную структуру для сопоставления дочерних элементов.

const
    tree = [{ type: "object", name: "pets", child: [{ type: "array", name: "properties", child: [{ type: "object", name: "PK" }, { type: "object", name: "PO" }, { type: "object", name: "PS" }, { type: "object", name: "PA", child: [{ type: "array", name: "list" }] }] }, { type: "object", name: "get" }] }],
    types = {
        object: (name, child) => child
            ? { [name]: Object.assign({}, ...child.map(fn)) }
            : { name: name },
        array: (name, child = []) => ({ [name]: child.map(fn) })
    },
    fn = ({ type, name, child }) => types[type](name, child),
    result = tree.map(fn);

console.log(result)
.as-console-wrapper { max-height: 100% !important; top: 0; }

Во-первых, я мисс, а не сэр ?

Ну, вот подробный пример, это не лучшая практика, но я думаю, что это более простой способ понять.


// First create an empty array to store your results. 
let expectedResults = [];

// Loop through you tree object
for (let i in tree) {
  
// create empty object for each tree object
  let treeObj = {};

  // get the name of the object
  const objName = tree[i]['name'];

  // assign it as a key and set it's value as object
  treeObj[objName] = {};

  // get the children
  const objChild = tree[i]['child'];

  // loop through the children
  for (let j in objChild) {

    // get the name
    const childName = objChild[j].name;

    // check the type and assign either as object either as array
    if (objChild[j].type === 'object') {
      treeObj[objName][childName] = {};
    }

    if (objChild[j].type === 'array') {
      treeObj[objName][childName] = [];

      const childArr = objChild[j].child;

      for (let k in childArr) {
        if (childArr[k].type === 'object') {
          treeObj[objName][childName].push({
              name: childArr[k].name
          });
        }

        if (childArr[k].type === 'array') {
          // and so on
        }
      }
    }
  }

  expectedResults.push(treeObj);
}

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