【问题标题】:How to convert array of nested objects to objects in javascript?如何将嵌套对象数组转换为javascript中的对象?
【发布时间】:2020-07-07 04:51:41
【问题描述】:

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

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

       }
   }   

【问题讨论】:

  • 接受的输出在语法上无效。
  • 接受的输出”不是一个有效的对象。在发布问题之前,请至少进行一些研究和测试。
  • 我编辑了 .对不起,这是错误
  • 你能举一个合适的例子来说明你想要的输出类型吗?
  • [{ "Permission":[ { "label":"Can View", "value":"can_view" }, { "label":"Can Create", "value":"can_create " } ] } ] 我想从中得到输出。我的输出是: let output= { can_view:"can_view", can_create:"can_create" }

标签: javascript arrays reactjs object functional-programming


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我得到了解决方案,但它是否最适合我的代码

    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)
    

    【讨论】:

    • 根据您要对对象执行的操作,可能是这样。
    【解决方案3】:

    你可以试试这样的:

     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]);
        }

    【讨论】:

    • 我只需要 { "Permission":[ { "label":"Can View", "value":"can_view" }, { "label":"Can Create", "value": "can_create" } ] } 这个数据
    猜你喜欢
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    • 2022-12-18
    • 2020-07-03
    • 2021-12-13
    • 1970-01-01
    相关资源
    最近更新 更多