首页 > 解决方案 > 如何将嵌套对象数组转换为javascript中的对象?

问题描述

我有一组嵌套的对象数组。我只想从数据中获取权限对象,我需要将数据数组转换为权限对象。

 "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"

       }
   }   

标签: javascriptarraysreactjsobjectfunctional-programming

解决方案


你可以用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);
}

推荐阅读