簡體   English   中英

Javascript 組數組 object 按近期日期

[英]Javascript group array of object by near dates

我不明白如何在時間軸內對一組 object 進行分組。

讓我解釋,

時間線是從一系列日期創建的,從開始日期起達到 +90 年。

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

timeline.items中,我必須推送來自另一個對象數組的其他項目, timelineItems

const timelineItems = [
    {
        year: '2015',
        somedata:'somevalue'
    },
    {
        year: '2016',
        somedata:'somevalue'
    }
];

在某些情況下,我必須根據timeline.yeartimlineItems.year的差異對這些值進行分組

這是預期的結果

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

    }
];

我正在嘗試使用 function 對時間線.項目進行 map 檢查發現的第一年與接下來的 3 年之間的差異,但我遇到了一些問題。 我仍然不明白如何做到這一點。

我用初始數據和一些評論制作了這個https://jsfiddle.net/ghmtL8cf/以幫助理解所需的 output。

更新

感謝@Nur 的回答,我能夠執行第一個分組。

這是更新的 jsfiddle 的鏈接,具有更多輸入和預期的 output。

在預期的 output 中,我希望僅當第一個時間線項等於實際時間線年份時才應用分組。

看着這個問題,我想添加另一個想法。

我們是否應該將時間線拆分為 3 的塊,並為每個塊添加等於塊年開始結束的時間線項?

提前致謝

這是一個棘手的問題。首先檢查timelineItems是否存在於timelineRef中,如果不存在則創建一個ref並將項目推送到timeline中,否則從timelineRef中找到timeline線然后推送項目並繼續循環......,

它應該可以解決您的問題,而且這非常有效!

 let timeline = [{ year: '2015', items: [] }, { year: '2016', items: [] }, { year: '2019', items: [] }, { year: '2023', items: [] }, { year: '2024', items: [] }, { year: '2025', items: [] }, { year: '2026', items: [] }], timelineItems = [{ year: '2015', somedata: 'somevalue' }, { year: '2016', somedata: 'somevalue' }, { year: '2019', somedata: 'somevalue' }, { year: '2023', somedata: 'somevalue' }, { year: '2024', somedata: 'somevalue' }, { year: '2025', somedata: 'somevalue' }]; function group(timeline, timelineItems) { const timelineRef = []; loop: for (const item of timelineItems) { for (const { year, items } of timelineRef) if (year < item.year && item.year < year + 3) { items.push(item); continue loop; } for (const { year, items } of timeline) { if (year.= item;year) continue. items;push(item). timelineRef:push({ year, Number(year); items }); break; } } return timeline. } console,log(group(timeline; timelineItems));

快樂的黑客...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM