Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.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/Typescript为角度树的平面数组创建数据_Javascript_Angular_Typescript_Angular Material_Angular Tree Component - Fatal编程技术网

如何使用Javascript/Typescript为角度树的平面数组创建数据

如何使用Javascript/Typescript为角度树的平面数组创建数据,javascript,angular,typescript,angular-material,angular-tree-component,Javascript,Angular,Typescript,Angular Material,Angular Tree Component,我有以下JSON数据-> { "data": [ { "documentId": "new_148_45646", "data": "new_data6" }, { "documentId": "new_145_456", "data": "new_da

我有以下JSON数据->

{
  "data": [
    {
      "documentId": "new_148_45646",
      "data": "new_data6"
    },
    {
      "documentId": "new_145_456",
      "data": "new_data1"
    },
    {
      "documentId": "new_148_4546",
      "data": "new_data2"
    },
    {
      "documentId": "new_145_456",
      "data": "new_data3"
    },
    
    {
      "documentId": "new_148_4546",
      "data": "new_data6"
    }      
  ]
}
我想将其转换为以下平面树数据

{
    "treeData": [
        {
            "documentId": "new_148_45646",
            "expandable": true,
            "level": 0           
          }, {
            "documentId": "new_148_45646",
            "expandable": false,
            "level": 1,
            "data": "new_data6"
          },
          {
            "documentId": "new_145_456",
            "expandable": true,
            "level": 0           
          }, {
            "documentId": "new_145_456",
            "expandable": false,
            "level": 1,
            "data": "new_data1"
          },
          {
            "documentId": "new_145_456",
            "expandable": false,
            "level": 1,
            "data": "new_data3"
          },
          {
            "documentId": "new_148_4546",
            "expandable": true,
            "level": 0           
          }, {
            "documentId": "new_148_4546",
            "expandable": false,
            "level": 1,
            "data": "new_data2"
          },
          {
            "documentId": "new_148_4546",
            "expandable": false,
            "level": 1,
            "data": "new_data6"
          }
    ]
}
因此,如果原始数组中有一个元素具有唯一的documentId,那么它将被转换 到2个节点->一个节点具有documentid,级别0,expandable=true,另一个节点具有相同documentid,expandable=false,级别1,数据

如果原始数组中有两个元素具有相同的documentId,则将对其进行转换 到3个节点->一个节点具有documentid,级别0,expandable=true,两个节点具有相同的documentid,expandable=false,级别1,数据

如果原始数组中有3个元素具有相同的documentId,则将对其进行转换 到4个节点->一个节点具有documentid,级别0,可扩展=true,以及3个节点具有相同documentid,可扩展=false,级别1,数据

数据将始终仅保留到1级


谁能帮我一下吗。谢谢

可能不是最好的代码,但它是一行代码-所以这比没有行要好:p

const输入={
“数据”:[
{
“文档ID”:“新文档148\U 45646”,
“数据”:“新数据6”
},
{
“文档ID”:“新的”文档145“文档456”,
“数据”:“新数据1”
},
{
“文档ID”:“新文档148\U 4546”,
“数据”:“新数据2”
},
{
“文档ID”:“新的”文档145“文档456”,
“数据”:“新数据3”
},
{
“文档ID”:“新文档148\U 4546”,
“数据”:“新数据6”
}      
]
}
const output=[…input.data.reduce((a,{documentId,data})=>(a.set(documentId,(a.get(documentId)| |[])).concat([{documentId,expandable:false,level:1,data,}]),a),new Map().flat().flatMap(i=>typeof i=='string'?({documentId:i,expandable:true,level:0}):i);

console.log(输出)
谢谢@Jaromanda X的回答。当使用上述方法时,我得到以下异常。类型“[any,any][]”上不存在属性“flat”。ts(2339)我不熟悉angular/typescript。试图找到解决办法。你知道吗…谢谢,对不起,我不知道typescript不懂现代(ES2019)JavaScriptReach thaks@Jaromanda X。我用..酷-很高兴你能解决这个问题-甚至不认为你在使用typescript(应该读你的标签)