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
,但我碰壁了。
- 创建一个空字典
- 迭代外部数组
- 在每次外部数组迭代中,对内部数组进行迭代。
- 在每次子迭代中检查时间戳是否作为键存在于字典中。如果没有,则添加它并将其关联值设置为该字典条目的值。如果确实存在,则将其关联值添加到字典条目的当前值中。
const sumDict = {};
response.forEach((batch) => {
batch.forEach((datapoint) => {
const [key, value] = datapoint;
if (!sumDict[key]) {
sumDict[key] = value;
} else {
sumDict[key] += value;
}
});
});
注意:在您的示例中,您需要用另一组括号将响应数组括起来。
我需要合并一系列具有相同形状数据的 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
,但我碰壁了。
- 创建一个空字典
- 迭代外部数组
- 在每次外部数组迭代中,对内部数组进行迭代。
- 在每次子迭代中检查时间戳是否作为键存在于字典中。如果没有,则添加它并将其关联值设置为该字典条目的值。如果确实存在,则将其关联值添加到字典条目的当前值中。
const sumDict = {};
response.forEach((batch) => {
batch.forEach((datapoint) => {
const [key, value] = datapoint;
if (!sumDict[key]) {
sumDict[key] = value;
} else {
sumDict[key] += value;
}
});
});
注意:在您的示例中,您需要用另一组括号将响应数组括起来。