Javascript 创建嵌套的对象数组,直到达到某个限制

Javascript 创建嵌套的对象数组,直到达到某个限制,javascript,arrays,ecmascript-6,nested,lodash,Javascript,Arrays,Ecmascript 6,Nested,Lodash,我想创建一个嵌套的数组,数组中的对象达到一个极限,比如说10个。因此,当计数减少到零时,它应该返回数组,直到该子/父级 我尝试了这个方法,但将所有对象放在单独的数组中 这就是我调用函数的方式,以使嵌套的父子关系达到10。 是否有任何lodash/下划线实现来实现这一点? 任何帮助都将不胜感激 我不认为if条件是您要寻找的计数未在任何位置进行修改或保存。我将修改if语句以检查父票据的子票据的长度,与计数进行比较: if(ticket.parent&&ticketObj[ticket.parent]

我想创建一个嵌套的数组,数组中的对象达到一个极限,比如说10个。因此,当计数减少到零时,它应该返回数组,直到该子/父级

我尝试了这个方法,但将所有对象放在单独的数组中

这就是我调用函数的方式,以使嵌套的父子关系达到10。 是否有任何lodash/下划线实现来实现这一点? 任何帮助都将不胜感激


我不认为
if
条件是您要寻找的<代码>计数未在任何位置进行修改或保存。我将修改if语句以检查父票据的
子票据的长度,与计数进行比较:

if(ticket.parent&&ticketObj[ticket.parent].children.length


但是,我不知道最终的结果是什么,以及如何计算
子对象
列表中的嵌套对象。

您可以使用递归方法和
减少
方法,将添加元素的计数保持在一个变量中,并检查计数是否小于0,以停止向数组添加元素

const ticketsData=[{“id”:1,“title”:“parent”,“parent”:0,“url”:“},{“id”:2,“title”:“parent”,“parent”:0,“url”:“},{”id“:3,“title”:“},{”id“:4,“title”:“sub-child”,“parent”:3,“url”:“},{”id“:5,“title”:“sub sub sub sub-sub-child”,“parent”:4,“url”:“},{“子-子-子2”,“父”:4,“url:”},{“id”:13,“标题”:“子-子2”,“父”:3,“url:”},{“id”:14,“标题”:“子”,“父”:2,“url:”},{“id”:7,“标题”:“子-子”,“父”:5,“url:”},{“id”:8,“标题”:“子-子”,“父”:5,“标题”:“子-子-子-子-子”,“父”:5,“url:”},{“标题”:“子-子-子3”父项:4,“url”:“},{“id”:12,“标题”:“子项”4,“父项”:4,“url”:“}]
让计数=10;
函数createTicketTree(数据,pid=0){
返回数据。减少((r,e)=>{
如果(e.parent===pid&&count>0){
计数--
常数o={…e}
const c=createTicketTree(数据,e.id);
如果(c.长度)o.儿童=c;
r、 推(o)
}
返回r;
}, [])
}
const result=createTicketTree(ticketsData);

console.log(结果)
你有想要的结果的例子吗?分享预期的结果format@NinaScholz:更新了我的预期输出。数组排序了吗?为什么不取前n个对象并从中构建一棵树?实际上我没有得到限制点。如果父对象在计数中,您想要树的完整分支,还是限制了wa的深度Ned嵌套部件?谢谢@Nenad,这很好用。有没有一种方法可以避免由于性能问题而导致的递归?我指的是,我会接受这个答案,尽管在性能上没有太大差异。再次感谢你节省了我的时间。在数据池越来越小的情况下,你可以添加一些这样的优化。你可以uld也可以使用普通for循环,如果性能很重要,我们可以在函数中使用这个count变量吗?因为我必须在react中的状态将它传递到函数中。
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: '' }
          ];
> 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;
    };
    createTicketTree(ticketsData, 10);