簡體   English   中英

對對象數組中具有相同值的元素求和

[英]Sum elements with same value in array of objects

我有一個這樣的數組:

[{ "x": 2020-06-27T11:26:00.000Z, "y": 499 },
 { "x": 2020-06-27T11:30:00.000Z, "y": 21 }]

我想對每兩小時間隔( x )內的y值求和。 y值應組合為 0-2am、2-4am、4-6am 等間隔。

到目前為止,我所做的是將相同小時的元素相加:

var t = {};

unsortedData.forEach((v) => {
    if (t[v.x.getHours()]) {
        t[v.x.getHours()] += v.y;
    } else {
        t[v.x.getHours()] = v.y;
    }
});

unsortedData = t;

這返回給我類似: {"13": 512, "15": 98..}等等。

現在,此代碼存在一些問題,我不知道如何解決。

首先是如何讓它以兩小時的間隔而不是相同的小時檢查工作? 還有什么方法可以返回一個完整的日期而不是幾個小時?

我將假設在您的原始數據中x屬性具有Date實例,因為您在這些值上調用getHours()

您可以清除日期值的小時分量的最低有效位,以便它們將截斷為 2 的倍數。盡管使用UTC***方法,並將這些日期分量傳遞給Date.UTC方法,因為您的日期用 UTC 字符串初始化。 這為您提供了 Unix 紀元編號,您可以將其用作t object 的屬性(考慮使用更有意義的名稱)。

但是,我會將完整的 object 存儲在這些t屬性中,以便最后您可以提取 object 值,並最終得到與您開始時完全相同的格式:

 let unsortedData = [ { "x": new Date("2020-06-27T11:26:00.000Z"), "y": 499 }, { "x": new Date("2020-06-27T11:30:00.000Z"), "y": 21 }, { "x": new Date("2020-06-27T12:01:00.000Z"), "y": 15 }, { "x": new Date("2020-06-27T13:59:00.000Z"), "y": 8 }, { "x": new Date("2020-06-27T14:20:00.000Z"), "y": 30 }, { "x": new Date("2020-06-27T14:25:00.000Z"), "y": 1 }, ]; let t = {}; unsortedData.forEach((v) => { let block = Date.UTC( vxgetUTCFullYear(), vxgetUTCMonth(), vxgetUTCDate(), vxgetUTCHours() & 0xFE // ignore last bit of hours binary ); if (t[block]) { t[block].y += vy; } else t[block] = { x: new Date(block), y: vy }; }); let sortedData = Object.values(t); console.log(sortedData);

暫無
暫無

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

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