Как отфильтровать значения из вложенных объектов в JavaScript - PullRequest
0 голосов
/ 07 мая 2019

Мне нужно получить доступ к свойствам массива объектов JavaScript и преобразовать его в новый массив.Массив принимает такую ​​форму.

Company = [
    { 
      name:"A", 
      items:[
          { name:"AA",
            items:[
             { name:"AAA",
               items:[...]
             },
             { name:"AAB",
               items:[...]
             }
          ]
       },
        { name:"AB",items:[{},{}]}
       ]
    },
    {
      name:"B", items:[{ name:"BA",items:[{...},{...}]},{ name:"BB",items:[{...},{...}]}]
    },
    {
      name:"C", items:[{ name:"CA",items:[{...},{...}]},{ name:"CB",items:[{...},{...}]}]
    }
........
]; 

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

function checkitems(data){
  if (typeof data.items !== "undefined" || data.items.length > 0) {

    data.items.map(dept => {
      return {
        title: dept.name,
        children: checkitems(dept)
      };
    });
  }
  return;
    }

    company.map((dept)=>{
       return {
         title:dept.name,
         children: checkitems(dept)
       }
    });

Ответы [ 2 ]

2 голосов
/ 07 мая 2019

Вы можете рекурсивно обновить items следующим образом:

const Company=[{name:"A",items:[{name:"AA",items:[{name:"AAA",},{name:"AAB",}]},{name:"AB"}]},{name:"B",items:[{name:"BA",items:[{name:"BAA",},{name:"BAB",}]},{name:"BB",}]},{name:"C",items:[{name:"CA",},{name:"CB",}]}];

function trasnform(array) {
  return array.map(({ name , items }) => {
    const obj = { title: name }
    if(items)
      obj.children = trasnform(items);
      
    return obj;
  })
}

console.log(trasnform(Company))
1 голос
/ 07 мая 2019

Использование деструктурирующего присваивания и аргументов по умолчанию -

const transform = (arr = []) =>
  arr.map(({ name, items = [] }) =>
    ({ title: name, children: transform(items) })
  )

Разлагается с использованием взаимной рекурсии -

const transform1 = ({ name, items = [] }) =>
  ({ title: name, children: transform(items) })

const transform = (arr = []) =>
  arr.map(transform1)
...