【发布时间】:2020-07-20 15:52:16
【问题描述】:
I have an array of objects like this
const ticketsData = [
{ id: 1, title: 'parent', parent: 0, url: '' },
{ id: 2, title: 'parent', parent: 0, url: '' },
{ id: 3, title: 'child', parent: 1, url: '' },
{ id: 4, title: 'sub child', parent: 3, url: '' },
{ id: 5, title: 'sub sub child', parent: 4, url: '' },
{ id: 6, title: 'sub sub sub child', parent: 5, url: '' },
{ id: 10, title: 'sub sub child 2', parent: 4, url: '' },
{ id: 13, title: 'sub child 2', parent: 3, url: '' },
{ id: 14, title: 'child', parent: 2, url: '' },
{ id: 7, title: 'sub sub sub child', parent: 5, url: '' },
{ id: 8, title: 'sub sub sub child', parent: 5, url: '' },
{ id: 9, title: 'sub sub sub child', parent: 5, url: '' },
{ id: 11, title: 'sub sub child 3', parent: 4, url: '' },
{ id: 12, title: 'sub sub child 4', parent: 4, url: '' }
];
我想创建一个嵌套的对象数组,直到一个限制,比如 10。所以当计数减少到零时,它应该返回数组直到那个孩子/父母。
> This is my expected Output:
[{ id: 1, title: 'parent', parent: 0, url: '', children: [
{ id: 3, title: 'child', parent: 1, url: '', children:[
{ id: 4, title: 'sub child', parent: 3, url: '', children:[
{ id: 5, title: 'sub sub child', parent: 4, url: '' , children:[
{ id: 6, title: 'sub sub sub child', parent: 5, url: '', children:[] },
{ id: 7, title: 'sub sub sub child', parent: 5, url: '', children:[] },
{ id: 8, title: 'sub sub sub child', parent: 5, url: '', children:[] },
{ id: 9, title: 'sub sub sub child', parent: 5, url: '', children:[] }
]},
{ id: 10, title: 'sub sub child 2', parent: 4, url: '', children:[] },
{ id: 11, title: 'sub sub child 3', parent: 4, url: '', children:[] }
] }
] }
] }]
我试过了,但把所有对象放在单独的数组中。
const createTicketTree = (tickets, count) => {
let ticketObj = {};
let ticketHierarchy = []
tickets.map( ticket => {
ticketObj[ticket.id] = { ...ticket, children: [] };
if(ticket.parent && count && count--) {
ticketObj[ticket.parent].children.push(ticketObj[ticket.id])
}
else {
ticketHierarchy.push(ticketObj[ticket.id])
}
});
return ticketHierarchy;
};
这就是我调用该函数以使嵌套的父子关系达到 10 的方式。 是否有任何 lodash/underscore 实现来实现这一点? 任何帮助将不胜感激
createTicketTree(ticketsData, 10);
【问题讨论】:
-
你有想要的结果的例子吗?
-
分享预期的输出格式
-
@NinaScholz:更新了我的预期输出
-
数组排序了吗?为什么不取前 n 个对象并从中构建一棵树?
-
实际上我没有得到限制的意义。如果父级在计数中,您想要树的完整分支还是限制想要的嵌套部分的深度?
标签: javascript arrays ecmascript-6 nested lodash