繁体   English   中英

降低 Typescript/JS 中嵌套 object 数组的级别

[英]Reduce level of nested object array in Typescript/JS

我正在学习 TypeScript 和 Angular 并且我正在努力解决一个问题。 说,我有一个Application对象数组。 每个Application object 都有这种嵌套结构:

应用
|
----[文档类型]
---------|
- - - - - - - [文档]
------------------|
------------------------元数据

(每个Application都有一个Document Type数组。每个Document Type都有一个Document数组。每个Document里面都有一个Metadata

例子:

[
 {
  "name": "Application 1",
  "parent_type": "root",
  "children": [
   {
    "name": "Operations Manual",
    "parent": "Application 1",
    "parent_type": "application",
    "count": 2,
    "children": [
     {
      "name": "App1-OpManual-1",
      "metadata": {
       "actualDocName": "operations1-app1",
       "currentStatus": "for review",
       "lastModifiedBy": "user 1",
       "size": 56,
       "fileExtension": "docx"
      }
     },
     {
      "name": "App1-OpManual-2",
      "metadata": {
       "actualDocName": "operations2-app1",
       "currentStatus": "for review",
       "lastModifiedBy": "user 2",
       "size": 56,
       "fileExtension": "pdf"
      }
     }
    ]
   }
  ]
 }
]

我正在尝试将此数组减少到这个(基本上,只保留嵌套到第 2 级并丢弃其余的):

应用
|
----[文档类型]

..所以,JSON 变成这样:

[
 {
  "name": "Application 1",
  "parent_type": "root",
  "children": [
   {
    "name": "Operations Manual",
    "parent": "Application 1",
    "parent_type": "application",
    "count": 2
   }
  ]
 }
] 

我一直在尝试使用教程中的多个示例,但无法获得正确的 JS 来执行此操作。 有人可以帮忙吗?

您可以使用.map()解构从数组中最外层的对象中获取所需的属性和值,然后再次使用.map()和解构从最内层的 object 中获取所需的属性map 阵列中的每个应用程序 object 到新创建的自身缩小版本:

 const arr = [{name:"Application 1",parent_type:"root",children:[{name:"Operations Manual",parent:"Application 1",parent_type:"application",count:2,children:[{name:"App1-OpManual-1",metadata:{actualDocName:"operations1-app1",currentStatus:"for review",lastModifiedBy:"user 1",size:56,fileExtension:"docx"}},{name:"App1-OpManual-2",metadata:{actualDocName:"operations2-app1",currentStatus:"for review",lastModifiedBy:"user 2",size:56,fileExtension:"pdf"}}]}]}]; const res = arr.map(({children, ...r}) => ( {...r, children: children.map(({children, ...keep}) => ({...keep})) } )); console.log(res);

暂无
暂无

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

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