繁体   English   中英

如何从数组对象中的嵌套数组获取数据

[英]How to get data from nested arrays in array object

我有这样的对象数组

array = {
    "microservices": [
        {
            "id": 1,
            "permissions": [
                {
                    "id": 65,
                    "name": "Default permission"
                },
                {
                    "id": 64,
                    "name": "Super user Access"
                }
            ]
        },
        {
            "id": 2,
            "permissions": []
        },
        {
            "id": 3,
            "permissions": [
                {
                    "id": 18,
                    "name": "Script: Update"
                },
                {
                    "id": 15,
                    "name": "Application: Delete"
                },
                {
                    "id": 9,
                    "name": "Workspace: Create"
                }
            ]
        }
    ]
}

从微服务数组中,我只想获取“权限”数组并将其存储到一个新变量中,所以我进行了搜索,但没有任何相关的解决方案,在此先感谢

您可以使用map运算符并单独获取该特定属性。 请检查以下JS示例。

 const array = { "microservices": [{ "id": 1, "permissions": [{ "id": 65, "name": "Default permission" }, { "id": 64, "name": "Super user Access" } ] }, { "id": 2, "permissions": [] }, { "id": 3, "permissions": [{ "id": 18, "name": "Script: Update" }, { "id": 15, "name": "Application: Delete" }, { "id": 9, "name": "Workspace: Create" } ] } ] } const output = [] array.microservices.map(function(x) { output.push(...x.permissions); }) console.log(output); 

只需简单地如下迭代json对象。 新数组“权限”将返回您的数据。

 getPermissions(){
   this.array.microservices.forEach(element => {
    element.permissions.forEach(ele => {
      this.permissions.push(ele);
     });
   });

   console.log(this.permissions);       
 }

预先也可以使用.map运算符。

这不是特定的Angular或Typescript问题,但是您可以这样操作

const whatYouNeed = array.microservices.reduce((sum, item) => {
    sum.push(item.permissions);
    return sum;
}, []);

或者,如果您希望它是一个级别:

const whatYouNeed = array.microservices.reduce((sum, item) => {
    sum = sum.concat(item.permissions);
    return sum;
}, []);

由于您只需要一个数组所有权限,因此这是最干净的方法。 在此处阅读有关flatMap的信息

 const permissions = array.microservices.flatMap(i => i.permissions)     
 console.log(permissions);

使用polyfill获得浏览器支持。 在以上链接中可用。

您可以使用ES6 map

const permissionsArrays = array.microservices.map(microservice => microservice.permissions)

因此,假设这是您收到的json数据:

{
  "microservices": [
    {
      "id": 1,
      "permissions": [
        {
          "id": 65,
          "name": "Default permission"
        },
        {
          "id": 64,
          "name": "Super user Access"
        }
      ]
    },
    {
      "id": 2,
      "permissions": []
    },
      {
      "id": 3,
      "permissions": [
        {
          "id": 18,
          "name": "Script: Update"
        },
        {
          "id": 15,
          "name": "Application: Delete"
        },
        {
          "id": 9,
          "name": "Workspace: Create"
        }
      ]
    }
   ]
 }

只需创建一个接口,即可使用智能感知:

export interface Microservice {
  microservices?: (MicroservicesEntity)[] | null;
}
export interface MicroservicesEntity {
  id: number;
  permissions?: (PermissionsEntity | null)[] | null;
}
export interface PermissionsEntity {
  id: number;
  name: string;
}

通过这种方式,您可以获得智能感知的帮助,因此可以通过引用json数据的接口来访问数据:

data: Microservice;

之后,使用map获取权限数组

首先,您有一个包含数组而不是实际数组的对象。 但是现在让我们忽略它。

array =  {
  "microservices": [
    {
      "id": 1,
      "permissions": [
        {
          "id": 65,
          "name": "Default permission"
        },
        {
          "id": 64,
          "name": "Super user Access"
        }
      ]
    },
    {
      "id": 2,
      "permissions": []
    },
      {
      "id": 3,
      "permissions": [
        {
          "id": 18,
          "name": "Script: Update"
        },
        {
          "id": 15,
          "name": "Application: Delete"
        },
        {
          "id": 9,
          "name": "Workspace: Create"
        }
      ]
    }
   ]
 }


const permissions = array.microservices.map(item => {
    return item.permissions;
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM