Как преобразовать массив вложенных объектов в объекты в javascript? - PullRequest
0 голосов
/ 26 марта 2020

У меня есть массив вложенных массивов объектов. Я хочу получить только объекты разрешений из данных, и мне нужно преобразовать массив данных в объекты разрешений.

 "data":[
       {
          "Book":[
             {
                "label":"Can View",
                "value":"can_view"
             },
             {
                "label":"Can Create",
                "value":"can_create"
             },

          ]
       },
       {
          "Articles":[
             {
                "label":"Can View",
                "value":"can_view"
             },
         ]
       },
       {
          "Journals":[

             {
                "label":"Can Upload",
                "value":"can_upload"
             },
             {
                "label":"Can Download",
                "value":"can_download"
             }
          ]
       },

       {
          "Permission":[
             {
                "label":"Can View",
                "value":"can_view"
             },
             {
                "label":"Can Create",
                "value":"can_create"
             }
          ]
       }
    ]

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

let dataPer = data.permissions.filter(item=>item.Permission).map(item=>item.Permission)

console.log(dataPer)

Мой принятый вывод будет:

 let output= {

       Permission:{
         can_view:"can_view",
       can_create:"can_create"

       }
   }   

Ответы [ 3 ]

1 голос
/ 27 марта 2020

Вы можете сделать это с помощью функции reduce, например:

const data = [
  {
    Book: [
      {
        label: "Can View",
        value: "can_view"
      },
      {
        label: "Can Create",
        value: "can_create"
      }
    ]
  },
  {
    Articles: [
      {
        label: "Can View",
        value: "can_view"
      }
    ]
  },
  {
    Journals: [
      {
        label: "Can Upload",
        value: "can_upload"
      },
      {
        label: "Can Download",
        value: "can_download"
      }
    ]
  },

  {
    Permission: [
      {
        label: "Can View",
        value: "can_view"
      },
      {
        label: "Can Create",
        value: "can_create"
      }
    ]
  }
];

-

function getPermissionList() {
  const list = data
    .filter(item => item.Permission)[0]
    .Permission.reduce((list, item) => {
      list.push({ [item.label]: item.value });
      return list;
    }, {});
  return Object.assign({}, list);
}
1 голос
/ 26 марта 2020

Ну, вы можете попробовать что-то вроде этого:

 let data=[
       {
          "Book":[
             {
                "label":"Can View",
                "value":"can_view"
             },
             {
                "label":"Can Create",
                "value":"can_create"
             }
          ]
       },
       {
          "Articles":[
             {
                "label":"Can View",
                "value":"can_view"
             }
         ]
       },
       {
          "Journals":[

             {
                "label":"Can Upload",
                "value":"can_upload"
             },
             {
                "label":"Can Download",
                "value":"can_download"
             }
          ]
       },

       {
          "Permission":[
             {
                "label":"Can View",
                "value":"can_view"
             },
             {
                "label":"Can Create",
                "value":"can_create"
             }
          ]
       }
    ];
let myPermissionObjects = [];
let permissionConvert = ()=>{
for(let current in data)
    for(let currentObject in data[current])
      for(let currentResult in data[current][currentObject])
        myPermissionObjects.push(data[current][currentObject][currentResult]);

};
permissionConvert();
console.log(myPermissionObjects);

, если я правильно понял вашу проблему

только для разрешения объекта:

let data=[
           {
              "Book":[
                 {
                    "label":"Can View",
                    "value":"can_view"
                 },
                 {
                    "label":"Can Create",
                    "value":"can_create"
                 }
              ]
           },
           {
              "Articles":[
                 {
                    "label":"Can View",
                    "value":"can_view"
                 }
             ]
           },
           {
              "Journals":[

                 {
                    "label":"Can Upload",
                    "value":"can_upload"
                 },
                 {
                    "label":"Can Download",
                    "value":"can_download"
                 }
              ]
           },

           {
              "Permission":[
                 {
                    "label":"Can View",
                    "value":"can_view"
                 },
                 {
                    "label":"Can Create",
                    "value":"can_create"
                 }
              ]
           }
        ];
    let myPermissionObjects = [];
    let permissionConvert = ()=>{
    for(let current in data)
        for(let currentObject in data[current].Permission)
          myPermissionObjects.push( data[current].Permission[currentObject]);


    };
    permissionConvert();
    console.log(myPermissionObjects);
    let onePermission = [];
    for(let next in myPermissionObjects)
    {
    onePermission["Permission"]=myPermissionObjects[next];
    console.log(myPermissionObjects[next]);
    }
0 голосов
/ 26 марта 2020

Я получил решение, но лучше ли оно для моего кода

let dataPer = data.permissions.filter(item=>item.Permission)
const result = Object.assign({},dataPer)

let res = result[0].Permission.map(item=>{
  return {
    [item.value]:item.value
  }
})
const obj = Object.assign({},res)
console.log(obj[0].can_view)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...