如何使用Javascript/Typescript为角度树的平面数组创建数据
我有以下JSON数据->如何使用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
{
"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(应该读你的标签)