Форматировать вложенный объект - PullRequest
0 голосов
/ 05 мая 2020

У меня есть переменная javascript со следующей структурой

var recurse = {
  level_0: [
    { 
      level_1 : [
        { 
          level_2_0 : [
            {
              level_3_0: {
                valid: true,
                available: false
              }
            }, {
              level_3_1 : {
                valid: true,
                available: true
              }
            }]
        }, { 
          level_2_1 : [
            {
              level_3_0: {
                valid: true,
                available: false
              }
            }, {
              level_3_1 : {
                valid: true,
                available: true
              }
            }]
        }]
    }]
}

Окончательная требуемая структура вывода

var recurse = {
  name: "level_0",
  property: [
    {
      name: "level_1",
      property: [
        {
          name: "level_2_0",
          property: [
            {
              name: "level_3_0",
              property: {
                valid: true,
                available: false
              }
            }, {
              name: "level_3_1",
              property: {
                valid: true,
                available: true
              }
            }]
        }, {
          name: "level_2_1",
          property: [
            {
              name: "level_3_0",
              property: {
                valid: true,
                available: false
              }
            }, {
              name: "level_3_1",
              property: {
                valid: true,
                available: true
              }
            }]
        }]
    }] 
}

Проблема с клонированием и обновление структуры для этого вложенного объекта с помощью generi c методов. Как добиться требуемой окончательной структуры объекта с помощью простых свойств javascript или reactjs.

Какой метод является наиболее подходящим для клонирования объекта javascript?

Примечание: объект имена- level_0 , level_1 level_2_0 может быть случайным или динамическим c.

Ответы [ 2 ]

1 голос
/ 05 мая 2020

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

var recurse = {
  level_0: [
    { 
      level_1 : [
        { 
          level_2_0 : [
            {
              level_3_0: {
                valid: true,
                available: false
              }
            }, {
              level_3_1 : {
                valid: true,
                available: true
              }
            }]
        }, { 
          level_2_1 : [
            {
              level_3_0: {
                valid: true,
                available: false
              }
            }, {
              level_3_1 : {
                valid: true,
                available: true
              }
            }]
        }]
    }]
}

function format(data) {
   return Object.entries(data).map(([key, value]) => {
       if(Array.isArray(value))
         return {
             name: key,
             property: [].concat(...value.map(item => format(item)))
         }
       return {
          name: key,
          property: value
       }
   })
}

console.log(format(recurse));
0 голосов
/ 05 мая 2020

Вы можете преобразовать это примерно так:

const transform = (tree) => 
  Object (tree) === tree
    ? Object .entries (tree) .map (([name, properties]) => ({
        name, 
        properties: Array .isArray (properties) ? properties .map (transform) : properties
      })) [0] // This is a strage thing to do with an object!  The original data structure is odd.
    : tree

var recurse = {level_0: [{level_1: [{level_2_0: [{level_3_0: {valid: true, available: false}}, {level_3_1: {valid: true, available: true}}]}, {level_2_1: [{level_3_0: {valid: true, available: false}}, {level_3_1: {valid: true, available: true}}]}]}]}

console .log (transform (recurse))
.as-console-wrapper {min-height: 100% !important; top: 0}

Но структура данных, с которой вы начинаете, довольно странная. Каждый уровень вложенности, кроме самого внутреннего, может иметь только одно свойство. Неужели так к вам поступают данные? Странное использование предметов. (Опять же, вы спрашиваете, как его изменить ...)

[0] в шестой строке выше имеет дело с этой странностью ввода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...