Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从数组对象中的嵌套数组中获取数据_Javascript_Json - Fatal编程技术网

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

Javascript 如何从数组对象中的嵌套数组中获取数据,javascript,json,Javascript,Json,我有一个像这样的对象数组 array = { "microservices": [ { "id": 1, "permissions": [ { "id": 65, "name": "Default permission" }, {

我有一个像这样的对象数组

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 whatYouNeed = array.microservices.reduce((sum, item) => {
    sum.push(item.permissions);
    return sum;
}, []);

从microservices数组中,我只想获得一个新变量的“权限”数组和存储,我搜索了它,但没有得到任何相关的解决方案,提前感谢您可以使用
map
操作符单独获取该特定属性。请检查下面的JS示例

const数组={
“微服务”:[{
“id”:1,
“权限”:[{
“id”:65,
“名称”:“默认权限”
},
{
“id”:64,
“名称”:“超级用户访问”
}
]
},
{
“id”:2,
“权限”:[]
},
{
“id”:3,
“权限”:[{
“id”:18,
“名称”:“脚本:更新”
},
{
“id”:15,
“名称”:“应用程序:删除”
},
{
“id”:9,
“名称”:“工作区:创建”
}
]
}
]
}
常量输出=[]
array.microservices.map(函数(x){
output.push(…x.permissions);
})

控制台日志(输出)这不是一个特定的角度或打字问题,但您可以这样做

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

因为您需要一个包含所有权限的单一数组,所以这将是最干净的方法。阅读平面地图


使用多边形填充以支持浏览器。在上面的链接中提供。

您可以使用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"
        }
      ]
    }
   ]
 }
只需创建一个界面,即可使用intellisense:

export interface Microservice {
  microservices?: (MicroservicesEntity)[] | null;
}
export interface MicroservicesEntity {
  id: number;
  permissions?: (PermissionsEntity | null)[] | null;
}
export interface PermissionsEntity {
  id: number;
  name: string;
}
通过这种方式,您可以获得intellisense的帮助,因此通过引用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;
});

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

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

   console.log(this.permissions);       
 }

您还可以预先使用.map操作符..

您的解决方案可以工作,但我只需要一个数组中的数据,如[{“id”:65,“名称”:“默认权限”},{“id”:64,“名称”:“超级用户访问”},{“id”:18,“名称”:“脚本:更新”},{“id”:15,“名称”:“应用程序:删除”},{“id”:9,“名称”:“工作区:创建”}]@RazaEllahi您能检查我更新的答案是否正确吗?您的解决方案有效,但我只需要一个数组中的数据,如[{“id”:65,“名称”:“默认权限”},{“id”:64,“名称”:“超级用户访问”},{“id”:18,“名称”:”脚本:更新“},{“id”:15,“名称”:“应用程序:删除”},{“id”:9,“名称”:“工作区:创建”}]