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



我有以下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,expandble=false,级别1,data

如果原始数组中有两个元素具有相同的documentId,则它将被转换到3个节点->一个节点具有documentid,级别0,expandable=true,2个节点具有相同documentid,expandble=false,级别1,data

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

数据将始终保持到1级

有人能帮我做这个吗。感谢

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

const input = {
"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"
}      
]
}
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(output)

最新更新