英文:
Build tree array from flat object array in typescript
问题
以下是您要求的代码部分的翻译:
const nest = (items, id = null, link = 'parent_id') =>
items
.filter(item => item[link] === id)
.map(item => ({ ...item, children: nest(items, item.id) }));
console.log(
nest(comments)
)
请注意,这是您提供的JavaScript代码,用于将JSON数据转换为树形结构。如果您需要更多帮助或有其他问题,请随时提出。
英文:
I have the following JSON:
"response": [
{
"id": 2,
"alias": "BOAZ01",
"descrizione": "ISTANZA DA VALUTARE",
"dataCreazione": "2022-12-21T09:01:09.972819",
"dataAggiornamento": "2022-12-21T09:01:09.972776",
"dataDisabilitazione": null,
"abilitato": true,
"attivita": null
},
{
"id": 4,
"alias": "BOAZ02",
"descrizione": "ISTANZA IN VALUTAZIONE",
"dataCreazione": "2022-12-21T09:01:58.87955",
"dataAggiornamento": "2022-12-21T09:01:58.879506",
"dataDisabilitazione": null,
"abilitato": true,
"attivita": {
"id": 2,
"alias": "BOAZ01",
"descrizione": "ISTANZA DA VALUTARE",
"dataCreazione": "2022-12-21T09:01:09.972819",
"dataAggiornamento": "2022-12-21T09:01:09.972776",
"dataDisabilitazione": null,
"abilitato": true,
"assegnazione": null,
"operatoreCorrente": {
"codiceFiscale": "YNDKPR83A07I282K",
"nome": "SUPERADMIN",
"cognome": "ZERODD",
"email": "superadmin@zerodd.it",
"dataCreazione": "2022-12-14T16:30:02.02323",
"dataAggiornamento": "2022-12-14T16:48:30.933103",
"abilitazioneEmail": true,
"tipo": "SUPERPOTERI",
"hibernateLazyInitializer": {
}
}
}
},
{
"id": 5,
"alias": "BOAZ03",
"descrizione": "ISTANZA VALUTATA",
"dataCreazione": "2022-12-21T09:02:14.445142",
"dataAggiornamento": "2022-12-21T09:02:14.4451",
"dataDisabilitazione": null,
"abilitato": true,
"attivita": {
"id": 4,
"alias": "BOAZ02",
"descrizione": "ISTANZA IN VALUTAZIONE",
"dataCreazione": "2022-12-21T09:01:58.87955",
"dataAggiornamento": "2022-12-21T09:01:58.879506",
"dataDisabilitazione": null,
"abilitato": true,
"assegnazione": null,
"operatoreCorrente": {
"codiceFiscale": "YNDKPR83A07I282K",
"nome": "SUPERADMIN",
"cognome": "ZERODD",
"email": "superadmin@zerodd.it",
"dataCreazione": "2022-12-14T16:30:02.02323",
"dataAggiornamento": "2022-12-14T16:48:30.933103",
"abilitazioneEmail": true,
"tipo": "SUPERPOTERI",
"hibernateLazyInitializer": {
}
}
}
},
{
"id": 6,
"alias": "BOAZ03.1",
"descrizione": "ISTANZA VALUTATA-AMMISSIBILE",
"dataCreazione": "2022-12-21T09:02:40.046325",
"dataAggiornamento": "2022-12-21T09:02:40.046285",
"dataDisabilitazione": null,
"abilitato": true,
"attivita": {
"id": 5,
"alias": "BOAZ03",
"descrizione": "ISTANZA VALUTATA",
"dataCreazione": "2022-12-21T09:02:14.445142",
"dataAggiornamento": "2022-12-21T09:02:14.4451",
"dataDisabilitazione": null,
"abilitato": true,
"assegnazione": null,
"operatoreCorrente": {
"codiceFiscale": "YNDKPR83A07I282K",
"nome": "SUPERADMIN",
"cognome": "ZERODD",
"email": "superadmin@zerodd.it",
"dataCreazione": "2022-12-14T16:30:02.02323",
"dataAggiornamento": "2022-12-14T16:48:30.933103",
"abilitazioneEmail": true,
"tipo": "SUPERPOTERI",
"hibernateLazyInitializer": {
}
}
}
},
{
"id": 7,
"alias": "BOAZ03.2",
"descrizione": "ISTANZA VALUTATA-INAMMISSIBILE",
"dataCreazione": "2022-12-21T09:02:54.895132",
"dataAggiornamento": "2022-12-21T09:02:54.8951",
"dataDisabilitazione": null,
"abilitato": true,
"attivita": {
"id": 5,
"alias": "BOAZ03",
"descrizione": "ISTANZA VALUTATA",
"dataCreazione": "2022-12-21T09:02:14.445142",
"dataAggiornamento": "2022-12-21T09:02:14.4451",
"dataDisabilitazione": null,
"abilitato": true,
"assegnazione": null,
"operatoreCorrente": {
"codiceFiscale": "YNDKPR83A07I282K",
"nome": "SUPERADMIN",
"cognome": "ZERODD",
"email": "superadmin@zerodd.it",
"dataCreazione": "2022-12-14T16:30:02.02323",
"dataAggiornamento": "2022-12-14T16:48:30.933103",
"abilitazioneEmail": true,
"tipo": "SUPERPOTERI",
"hibernateLazyInitializer": {
}
}
}
}]
and i need to get the following tree JSON:
[{
"id": 2,
"alias": "BOAZ01",
"descrizione": "ISTANZA DA VALUTARE",
"dataCreazione": "2022-12-21T09:01:09.972819",
"dataAggiornamento": "2022-12-21T09:01:09.972776",
"dataDisabilitazione": null,
"abilitato": true,
"children": [
{
"id": 4,
"alias": "BOAZ02",
"descrizione": "ISTANZA IN VALUTAZIONE",
"dataCreazione": "2022-12-21T09:01:58.87955",
"dataAggiornamento": "2022-12-21T09:01:58.879506",
"dataDisabilitazione": null,
"abilitato": true,
"children": [
{
"id": 5,
"alias": "BOAZ03",
"descrizione": "ISTANZA VALUTATA",
"dataCreazione": "2022-12-21T09:02:14.445142",
"dataAggiornamento": "2022-12-21T09:02:14.4451",
"dataDisabilitazione": null,
"abilitato": true,
"children": [
{
"id": 6,
"alias": "BOAZ03.1",
"descrizione": "ISTANZA VALUTATA-AMMISSIBILE",
"dataCreazione": "2022-12-21T09:02:40.046325",
"dataAggiornamento": "2022-12-21T09:02:40.046285",
"dataDisabilitazione": null,
"abilitato": true
},
{
"id": 7,
"alias": "BOAZ03.2",
"descrizione": "ISTANZA VALUTATA-INAMMISSIBILE",
"dataCreazione": "2022-12-21T09:02:54.895132",
"dataAggiornamento": "2022-12-21T09:02:54.8951",
"dataDisabilitazione": null,
"abilitato": true
}
]
}
]
}
]}]
I've already got to transform the following Json into a tree structure, using the following code:
const nest = (items, id = null, link = 'parent_id') =>
items
.filter(item => item === id)
.map(item => ({ ...item, children: nest(items, item.id) }));
console.log(
nest(comments)
)
on a simpler structure like the following:
const comments = [{
id: 1,
parent_id: null
}, {
id: 2,
parent_id: 1
}, {
id: 3,
parent_id: 1
}, {
id: 4,
parent_id: 2
}, {
id: 5,
parent_id: 4
}];
but it rightfully can't work since the properties are nested in recursive objects.
Some advice?
Thank you all.
答案1
得分: 1
你可以首先构建一个地图,该地图存储目标对象(不包括 attivita
属性),以它们的 id 为键。然后再次遍历数据,将子对象放置在其父对象的 children
数组中。
function makeHierarchy(response) {
const children = []; // 顶层节点
const map = new Map(response.map(({attivita, ...item}) => [item.id, item]))
.set(undefined, {children}); // 用于虚拟根的条目
for (const { id, attivita } of response) {
(map.get(attivita?.id).children ??= []).push(map.get(id));
}
return children;
}
// 问题中使用的示例数据:
const response = [{"id": 2,"alias": "BOAZ01","descrizione": "ISTANZA DA VALUTARE","dataCreazione": "2022-12-21T09:01:09.972819","dataAggiornamento": "2022-12-21T09:01:09.972776","dataDisabilitazione": null,"abilitato": true,"attivita": null},{"id": 4,"alias": "BOAZ02","descrizione": "ISTANZA IN VALUTAZIONE","dataCreazione": "2022-12-21T09:01:58.87955","dataAggiornamento": "2022-12-21T09:01:58.879506","dataDisabilitazione": null,"abilitato": true,"attivita": {"id": 2,"alias": "BOAZ01","descrizione": "ISTANZA DA VALUTARE","dataCreazione": "2022-12-21T09:01:09.972819","dataAggiornamento": "2022-12-21T09:01:09.972776","dataDisabilitazione": null,"abilitato": true,"assegnazione": null,"operatoreCorrente": {"codiceFiscale": "YNDKPR83A07I282K","nome": "SUPERADMIN","cognome": "ZERODD","email": "superadmin@zerodd.it","dataCreazione": "2022-12-14T16:30:02.02323","dataAggiornamento": "2022-12-14T16:48:30.933103","abilitazioneEmail": true,"tipo": "SUPERPOTERI","hibernateLazyInitializer": {}}}},{"id": 5,"alias": "BOAZ03","descrizione": "ISTANZA VALUTATA","dataCreazione": "2022-12-21T09:02:14.445142","dataAggiornamento": "2022-12-21T09:02:14.4451","dataDisabilitazione": null,"abilitato": true,"attivita": {"id": 4,"alias": "BOAZ02","descrizione": "ISTANZA IN VALUTAZIONE","dataCreazione": "2022-12-21T09:01:58.87955","dataAggiornamento": "2022-12-21T09:01:58.879506","dataDisabilitazione": null,"abilitato": true,"assegnazione": null,"operatoreCorrente": {"codiceFiscale": "YNDKPR83A07I282K","nome": "SUPERADMIN","cognome": "ZERODD","email": "superadmin@zerodd.it","dataCreazione": "2022-12-14T16:30:02.02323","dataAggiornamento": "2022-12-14T16:48:30.933103","abilitazioneEmail": true,"tipo": "SUPERPOTERI","hibernateLazyInitializer": {}}},{"id": 6,"alias": "BOAZ03.1","descrizione": "ISTANZA VALUTATA-AMMISSIBILE","dataCreazione": "2022-12-21T09:02:40.046325","dataAggiornamento": "2022-12-21T09:02:40.046285","dataDisabilitazione": null,"abilitato": true,"attivita": {"id": 5,"alias": "BOAZ03","descrizione": "ISTANZA VALUTATA","dataCreazione": "2022-12-21T09:02:14.445142","dataAggiornamento": "2022-12-21T09:02:14.4451","dataDisabilitazione": null,"abilitato": true,"assegnazione": null,"operatoreCorrente": {"codiceFiscale": "YNDKPR83A07I282K","nome": "SUPERADMIN","cognome": "ZERODD","email": "superadmin@zerodd.it","dataCreazione": "2022-12-14T16:30:02.02323","dataAggiornamento": "2022-12-14T16:48:30.933103","abilitazioneEmail": true,"tipo": "SUPERPOTERI","hibernateLazyInitializer": {}}},{"id": 7,"alias": "BOAZ03.2","descrizione": "ISTANZA VALUTATA-INAMMISSIBILE","dataCreazione": "2022-12-21T09:02:54.895132","dataAggiornamento": "2022-12-21T09:02:54.8951","dataDisabilitazione": null,"abilitato": true,"attivita": {"id": 5,"alias": "BOAZ03","descrizione": "ISTANZA VALUTATA","dataCreazione": "2022-12-21T09:02:14.445142","dataAggiornamento": "2022-12-21T09:02:14.4451","dataDisabilitazione": null,"abilitato": true,"assegnazione": null,"operatoreCorrente": {"codiceFiscale": "YNDKPR83A07I282K","nome": "SUPERADMIN","cognome": "ZERODD","email": "superadmin@zerodd.it","dataCreazione": "2022-12-14T16:30:02.02323","dataAggiornamento": "2022-12-14T16:48:30.933103","abilitazioneEmail": true,"tipo": "SUPERPOTERI","hibernateLazyInitializer": {}}}];
const forest = makeHierarchy(response);
console.log(forest);
这是给定代码的翻译部分。
英文:
You could first build a map that stores the target objects (without attivita
properties) keyed by their id. The traverse the data again to place a child in its parent's children
array.
<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-js -->
function makeHierarchy(response) {
const children = []; // Top-level nodes
const map = new Map(response.map(({attivita, ...item}) => [item.id, item]))
.set(undefined, {children}); // Entry for virtual root
for (const { id, attivita } of response) {
(map.get(attivita?.id).children ??= []).push(map.get(id));
}
return children;
}
// The data example used in the question:
const response = [{"id": 2,"alias": "BOAZ01","descrizione": "ISTANZA DA VALUTARE","dataCreazione": "2022-12-21T09:01:09.972819","dataAggiornamento": "2022-12-21T09:01:09.972776","dataDisabilitazione": null,"abilitato": true,"attivita": null},{"id": 4,"alias": "BOAZ02","descrizione": "ISTANZA IN VALUTAZIONE","dataCreazione": "2022-12-21T09:01:58.87955","dataAggiornamento": "2022-12-21T09:01:58.879506","dataDisabilitazione": null,"abilitato": true,"attivita": {"id": 2,"alias": "BOAZ01","descrizione": "ISTANZA DA VALUTARE","dataCreazione": "2022-12-21T09:01:09.972819","dataAggiornamento": "2022-12-21T09:01:09.972776","dataDisabilitazione": null,"abilitato": true,"assegnazione": null,"operatoreCorrente": {"codiceFiscale": "YNDKPR83A07I282K","nome": "SUPERADMIN","cognome": "ZERODD","email": "superadmin@zerodd.it","dataCreazione": "2022-12-14T16:30:02.02323","dataAggiornamento": "2022-12-14T16:48:30.933103","abilitazioneEmail": true,"tipo": "SUPERPOTERI","hibernateLazyInitializer": {}}}},{"id": 5,"alias": "BOAZ03","descrizione": "ISTANZA VALUTATA","dataCreazione": "2022-12-21T09:02:14.445142","dataAggiornamento": "2022-12-21T09:02:14.4451","dataDisabilitazione": null,"abilitato": true,"attivita": {"id": 4,"alias": "BOAZ02","descrizione": "ISTANZA IN VALUTAZIONE","dataCreazione": "2022-12-21T09:01:58.87955","dataAggiornamento": "2022-12-21T09:01:58.879506","dataDisabilitazione": null,"abilitato": true,"assegnazione": null,"operatoreCorrente": {"codiceFiscale": "YNDKPR83A07I282K","nome": "SUPERADMIN","cognome": "ZERODD","email": "superadmin@zerodd.it","dataCreazione": "2022-12-14T16:30:02.02323","dataAggiornamento": "2022-12-14T16:48:30.933103","abilitazioneEmail": true,"tipo": "SUPERPOTERI","hibernateLazyInitializer": {}}}},{"id": 6,"alias": "BOAZ03.1","descrizione": "ISTANZA VALUTATA-AMMISSIBILE","dataCreazione": "2022-12-21T09:02:40.046325","dataAggiornamento": "2022-12-21T09:02:40.046285","dataDisabilitazione": null,"abilitato": true,"attivita": {"id": 5,"alias": "BOAZ03","descrizione": "ISTANZA VALUTATA","dataCreazione": "2022-12-21T09:02:14.445142","dataAggiornamento": "2022-12-21T09:02:14.4451","dataDisabilitazione": null,"abilitato": true,"assegnazione": null,"operatoreCorrente": {"codiceFiscale": "YNDKPR83A07I282K","nome": "SUPERADMIN","cognome": "ZERODD","email": "superadmin@zerodd.it","dataCreazione": "2022-12-14T16:30:02.02323","dataAggiornamento": "2022-12-14T16:48:30.933103","abilitazioneEmail": true,"tipo": "SUPERPOTERI","hibernateLazyInitializer": {}}}},{"id": 7,"alias": "BOAZ03.2","descrizione": "ISTANZA VALUTATA-INAMMISSIBILE","dataCreazione": "2022-12-21T09:02:54.895132","dataAggiornamento": "2022-12-21T09:02:54.8951","dataDisabilitazione": null,"abilitato": true,"attivita": {"id": 5,"alias": "BOAZ03","descrizione": "ISTANZA VALUTATA","dataCreazione": "2022-12-21T09:02:14.445142","dataAggiornamento": "2022-12-21T09:02:14.4451","dataDisabilitazione": null,"abilitato": true,"assegnazione": null,"operatoreCorrente": {"codiceFiscale": "YNDKPR83A07I282K","nome": "SUPERADMIN","cognome": "ZERODD","email": "superadmin@zerodd.it","dataCreazione": "2022-12-14T16:30:02.02323","dataAggiornamento": "2022-12-14T16:48:30.933103","abilitazioneEmail": true,"tipo": "SUPERPOTERI","hibernateLazyInitializer": {}}}}];
const forest = makeHierarchy(response);
console.log(forest);
<!-- end snippet -->
答案2
得分: 1
你可以采用单循环方法,通过将节点和父节点作为彼此的参考,获取没有父节点的节点。
const data = [
{ id: 2, alias: "BOAZ01", descrizione: "ISTANZA DA VALUTARE", dataCreazione: "2022-12-21T09:01:09.972819", dataAggiornamento: "2022-12-21T09:01:09.972776", dataDisabilitazione: null, abilitato: true, attivita: null },
{ id: 4, alias: "BOAZ02", descrizione: "ISTANZA IN VALUTAZIONE", dataCreazione: "2022-12-21T09:01:58.87955", dataAggiornamento: "2022-12-21T09:01:58.879506", dataDisabilitazione: null, abilitato: true, attivita: { id: 2, alias: "BOAZ01", descrizione: "ISTANZA DA VALUTARE", dataCreazione: "2022-12-21T09:01:09.972819", dataAggiornamento: "2022-12-21T09:01:09.972776", dataDisabilitazione: null, abilitato: true, assegnazione: null, operatoreCorrente: { codiceFiscale: "YNDKPR83A07I282K", nome: "SUPERADMIN", cognome: "ZERODD", email: "superadmin@zerodd.it", dataCreazione: "2022-12-14T16:30:02.02323", dataAggiornamento: "2022-12-14T16:48:30.933103", abilitazioneEmail: true, tipo: "SUPERPOTERI", hibernateLazyInitializer: {} } }
},
{ id: 5, alias: "BOAZ03", descrizione: "ISTANZA VALUTATA", dataCreazione: "2022-12-21T09:02:14.445142", dataAggiornamento: "2022-12-21T09:02:14.4451", dataDisabilitazione: null, abilitato: true, attivita: { id: 4, alias: "BOAZ02", descrizione: "ISTANZA IN VALUTAZIONE", dataCreazione: "2022-12-21T09:01:58.87955", dataAggiornamento: "2022-12-21T09:01:58.879506", dataDisabilitazione: null, abilitato: true, assegnazione: null, operatoreCorrente: { codiceFiscale: "YNDKPR83A07I282K", nome: "SUPERADMIN", cognome: "ZERODD", email: "superadmin@zerodd.it", dataCreazione: "2022-12-14T16:30:02.02323", dataAggiornamento: "2022-12-14T16:48:30.933103", abilitazioneEmail: true, tipo: "SUPERPOTERI", hibernateLazyInitializer: {} } }
},
{ id: 6, alias: "BOAZ03.1", descrizione: "ISTANZA VALUTATA-AMMISSIBILE", dataCreazione: "2022-12-21T09:02:40.046325", dataAggiornamento: "2022-12-21T09:02:40.046285", dataDisabilitazione: null, abilitato: true, attivita: { id: 5, alias: "BOAZ03", descrizione: "ISTANZA VALUTATA", dataCreazione: "2022-12-21T09:02:14.445142", dataAggiornamento: "2022-12-21T09:02:14.4451", dataDisabilitazione: null, abilitato: true, assegnazione: null, operatoreCorrente: { codiceFiscale: "YNDKPR83A07I282K", nome: "SUPERADMIN", cognome: "ZERODD", email: "superadmin@zerodd.it", dataCreazione: "2022-12-14T16:30:02.02323", dataAggiornamento: "2022-12-14T16:48:30.933103", abilitazioneEmail: true, tipo: "SUPERPOTERI", hibernateLazyInitializer: {} } }
},
{ id: 7, alias: "BOAZ03.2", descrizione: "ISTANZA VALUTATA-INAMMISSIBILE", dataCreazione: "2022-12-21T09:02:54.895132", dataAggiornamento: "2022-12-21T09:02:54.8951", dataDisabilitazione: null, abilitato: true, attivita: { id: 5, alias: "BOAZ03", descrizione: "ISTANZA VALUTATA", dataCreazione: "2022-12-21T09:02:14.445142", dataAggiornamento: "2022-12-21T09:02:14.4451", dataDisabilitazione: null, abilitato: true, assegnazione: null, operatoreCorrente: { codiceFiscale: "YNDKPR83A07I282K", nome: "SUPERADMIN", cognome: "ZERODD", email: "superadmin@zerodd.it", dataCreazione: "2022-12-14T16:30:02.02323", dataAggiornamento: "2022-12-14T16:48:30.933103", abilitazioneEmail: true, tipo: "SUPERPOTERI", hibernateLazyInitializer: {} } }
}
];
const tree = data
.reduce((t, { attivita, ...o }) => {
const parent = attivita?.id ?? 'root';
Object.assign(t[o.id] = t[o.id] || {}, o);
((t[parent] ??= {}).children ??= []).push(t[o.id]);
return t;
}, {})
.root
.children;
console.log(tree);
希望这有所帮助。
英文:
You could take a single loop approach by taking node and parent nodes as reference to each other and get the nodes without having parent nodes.
<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-js -->
const
data = [{ id: 2, alias: "BOAZ01", descrizione: "ISTANZA DA VALUTARE", dataCreazione: "2022-12-21T09:01:09.972819", dataAggiornamento: "2022-12-21T09:01:09.972776", dataDisabilitazione: null, abilitato: true, attivita: null }, { id: 4, alias: "BOAZ02", descrizione: "ISTANZA IN VALUTAZIONE", dataCreazione: "2022-12-21T09:01:58.87955", dataAggiornamento: "2022-12-21T09:01:58.879506", dataDisabilitazione: null, abilitato: true, attivita: { id: 2, alias: "BOAZ01", descrizione: "ISTANZA DA VALUTARE", dataCreazione: "2022-12-21T09:01:09.972819", dataAggiornamento: "2022-12-21T09:01:09.972776", dataDisabilitazione: null, abilitato: true, assegnazione: null, operatoreCorrente: { codiceFiscale: "YNDKPR83A07I282K", nome: "SUPERADMIN", cognome: "ZERODD", email: "superadmin@zerodd.it", dataCreazione: "2022-12-14T16:30:02.02323", dataAggiornamento: "2022-12-14T16:48:30.933103", abilitazioneEmail: true, tipo: "SUPERPOTERI", hibernateLazyInitializer: {} } } }, { id: 5, alias: "BOAZ03", descrizione: "ISTANZA VALUTATA", dataCreazione: "2022-12-21T09:02:14.445142", dataAggiornamento: "2022-12-21T09:02:14.4451", dataDisabilitazione: null, abilitato: true, attivita: { id: 4, alias: "BOAZ02", descrizione: "ISTANZA IN VALUTAZIONE", dataCreazione: "2022-12-21T09:01:58.87955", dataAggiornamento: "2022-12-21T09:01:58.879506", dataDisabilitazione: null, abilitato: true, assegnazione: null, operatoreCorrente: { codiceFiscale: "YNDKPR83A07I282K", nome: "SUPERADMIN", cognome: "ZERODD", email: "superadmin@zerodd.it", dataCreazione: "2022-12-14T16:30:02.02323", dataAggiornamento: "2022-12-14T16:48:30.933103", abilitazioneEmail: true, tipo: "SUPERPOTERI", hibernateLazyInitializer: {} } } }, { id: 6, alias: "BOAZ03.1", descrizione: "ISTANZA VALUTATA-AMMISSIBILE", dataCreazione: "2022-12-21T09:02:40.046325", dataAggiornamento: "2022-12-21T09:02:40.046285", dataDisabilitazione: null, abilitato: true, attivita: { id: 5, alias: "BOAZ03", descrizione: "ISTANZA VALUTATA", dataCreazione: "2022-12-21T09:02:14.445142", dataAggiornamento: "2022-12-21T09:02:14.4451", dataDisabilitazione: null, abilitato: true, assegnazione: null, operatoreCorrente: { codiceFiscale: "YNDKPR83A07I282K", nome: "SUPERADMIN", cognome: "ZERODD", email: "superadmin@zerodd.it", dataCreazione: "2022-12-14T16:30:02.02323", dataAggiornamento: "2022-12-14T16:48:30.933103", abilitazioneEmail: true, tipo: "SUPERPOTERI", hibernateLazyInitializer: {} } } }, { id: 7, alias: "BOAZ03.2", descrizione: "ISTANZA VALUTATA-INAMMISSIBILE", dataCreazione: "2022-12-21T09:02:54.895132", dataAggiornamento: "2022-12-21T09:02:54.8951", dataDisabilitazione: null, abilitato: true, attivita: { id: 5, alias: "BOAZ03", descrizione: "ISTANZA VALUTATA", dataCreazione: "2022-12-21T09:02:14.445142", dataAggiornamento: "2022-12-21T09:02:14.4451", dataDisabilitazione: null, abilitato: true, assegnazione: null, operatoreCorrente: { codiceFiscale: "YNDKPR83A07I282K", nome: "SUPERADMIN", cognome: "ZERODD", email: "superadmin@zerodd.it", dataCreazione: "2022-12-14T16:30:02.02323", dataAggiornamento: "2022-12-14T16:48:30.933103", abilitazioneEmail: true, tipo: "SUPERPOTERI", hibernateLazyInitializer: {} } } }],
tree = data
.reduce((t, { attivita, ...o }) => {
const parent = attivita?.id ?? 'root';
Object.assign(t[o.id] = t[o.id] || {}, o);
((t[parent] ??= {}).children ??= []).push(t[o.id]);
return t;
}, {})
.root
.children;
console.log(tree);
<!-- language: lang-css -->
.as-console-wrapper { max-height: 100% !important; top: 0; }
<!-- end snippet -->
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论