Javascript按临近日期对对象数组进行分组

Javascript按临近日期对对象数组进行分组,javascript,arrays,date,grouping,Javascript,Arrays,Date,Grouping,我不明白如何在时间线内对一组对象进行分组 让我解释一下 时间线是根据一系列日期创建的,从开始日期算起,时间线达到+90年 const timeline = [ { year: '2015', items: [] }, { year: '2016', items: [] } ]; 在时间线内。项目我必须推送来自另一个对象数组的其他项目,时间线项目 在某些情况下,我必须根据timeline.year和t

我不明白如何在时间线内对一组对象进行分组

让我解释一下

时间线是根据一系列日期创建的,从开始日期算起,时间线达到+90年

const timeline = [
    {
        year: '2015',
        items: []
    },
    {
        year: '2016',
        items: []
    }
];
时间线内。项目我必须推送来自另一个对象数组的其他项目,时间线项目

在某些情况下,我必须根据timeline.yeartimlineItems.year的差异对这些值进行分组

这是预期的结果

const timeline = [{
        year: '2015',
        items: [{
                year: '2015',
                somedata: 'somevalue'
            },
            {
                year: '2016',
                somedata: 'somevalue'
            }
        ]
    },
    {
        year: '2016',
        items: []

    }
];
我正在尝试映射timeline.items,该函数用于检查发现的第一年和未来3年之间的差异,但我遇到了一些问题。 我还是不明白怎么做

我已经使用了初始数据和一些注释来帮助理解所需的输出

更新

多亏了@Nur answer,我才能够进行第一次分组

具有更多输入和预期输出的更新JSFIDLE

在预期输出中,我希望仅当第一个timelineItems等于实际的时间线年份时才应用分组

看看这个问题,我想补充另一个想法

我们是否应该将时间线分成3块,并为每个块添加等于块年开始和结束的时间线项目


提前感谢这是一个棘手的问题。首先检查
timelineItems
是否存在于
timelineRef
中,如果没有,则创建ref并将项目推送到
timeline
,否则从
timelineRef
中找到
timeline
,然后推送项目并继续循环


它应该可以解决你的问题,这是超高效的!我认为
{year:'2016',somedata:'somevalue'}
应该属于2016年?由于临近年份的逻辑,如果2016年是前一年的一组,我不得不跳过插入,我发现它很混乱,你能提供更多细节吗。。。另外,在您的
输入中提供更多数据
如果您在输入和预期输出中提供更多项目,那将非常好…嗨,首先感谢您尝试帮助我了解可能的解决方案,我已经尝试了您的解决方案,但我仍然有一个问题。我已经更新了JSFIDLE,并在timelineItems中添加了另一项。分组需要另一个规则,在执行分组功能之前,我必须检查时间线内的年份是否等于timelineItems的年份,然后添加范围内的其他timelineItems。在JSFIDLE中,2019年的时间线项目位于2016年而不是2019年的时间线内。谢谢你,我正面临上述问题,我把时间线项目2019年放在时间线2016年内,而不是2019年。我无法帮助你获得如此少的信息。。。第一,为什么应属于2019年?你能用更多的输入更新你的问题吗?我已经更新了答案,谢谢!
const timeline = [{
        year: '2015',
        items: [{
                year: '2015',
                somedata: 'somevalue'
            },
            {
                year: '2016',
                somedata: 'somevalue'
            }
        ]
    },
    {
        year: '2016',
        items: []

    }
];