JavaScript 中的数据聚合,数组(多个 API 请求)

Data aggregation in JavaScript, Arrays (Multiple API requests)

我需要合并一系列具有相同形状数据的 API 请求。数据以数组中一系列数组的形式 returned,具有纪元值和原始数据点值:

    let response1 = [
        [1610496000000, 24294673600.944046],
        [1610582400000, 24337321169.826145],
        [1610668800000, 24213693580.926777],
        [1610755200000, 24266793529.261494],
        [1610841600000, 24315907744.20519],
        [1610928000000, 24325253500.348637],
        [1611014400000, 24361784336.09795],
        [1611025732000, 24322220360.696705],
    ]

    let response2 = [
        [1610496000000, 4783652038.103683],
        [1610582400000, 4762603311.208288],
        [1610668800000, 4828960535.356582],
        [1610755200000, 4876847232.563923],
        [1610841600000, 5042504749.588362],
        [1610928000000, 5073254051.47403],
        [1611014400000, 5130649762.345672],
        [1611028765000, 5125428823.791457],
    ]

目标是能够将每个唯一的纪元值汇总为一个值。

可以安全地假设每个数据集将 return 相同数量的项目(和相同的时代),尽管如果每个数据集不包含时代,我会对一个优雅的解决方案感兴趣其他数据集也是如此。

我试图结合使用 .reduce.map,但我碰壁了。

  1. 创建一个空字典
  2. 迭代外部数组
  3. 在每次外部数组迭代中,对内部数组进行迭代。
  4. 在每次子迭代中检查时间戳是否作为键存在于字典中。如果没有,则添加它并将其关联值设置为该字典条目的值。如果确实存在,则将其关联值添加到字典条目的当前值中。

const sumDict = {};
response.forEach((batch) => {
  batch.forEach((datapoint) => {
    const [key, value] = datapoint;
    if (!sumDict[key]) {
      sumDict[key] = value;
    } else {
      sumDict[key] += value;
    }
  });
});

注意:在您的示例中,您需要用另一组括号将响应数组括起来。