我有一些数据:
const data = [
[
[1609459200000, 18],
[1612137600000, 12],
[1614556800000, 12],
[1617231600000, 14]
],
[
[1609459200000, 30],
[1612137600000, 501],
[1614556800000, 81],
[1617231600000, 82],
]
]
长数字是时间戳,我想返回一个数组,如下所示:
const result = [{
x: 1609459200000,
y: 48
}, {
x: 1612137600000,
y: 513
}, {
x: 1614556800000,
y: 93
}, {
x: 1617231600000,
y: 96
}]
X 将包含时间戳,Y 将是每个内部数组索引 1 处的值的总和,对应于每个时间戳。
如果数组的一个元素比另一个元素具有更多的值,则无论如何都应该将其求和,如下所示:
const data = [
[
[1609459200000, 18],
[1612137600000, 12],
[1614556800000, 12],
[1617231600000, 14]
],
[
[1609459200000, 30],
[1612137600000, 501],
[1614556800000, 81],
]
]
const result = [{
x: 1609459200000,
y: 48
}, {
x: 1612137600000,
y: 513
}, {
x: 1614556800000,
y: 93
}, {
x: 1617231600000,
y: 14
}]
我的尝试完全没有值(value),无法通过数组为多维的部分
失败
const totals = data.reduce((total, curr, i) => {
total = {
x: curr[0][i],
y: curr[1][i]
}
}, {})
console.log('total', totals)
编辑
数据数组可以有 2 个以上的子数组。
最佳答案
您可以展平数组,然后对其执行 reduce
操作,使用对象来存储每个时间戳的总和。
const data = [
[
[1609459200000, 18],
[1612137600000, 12],
[1614556800000, 12],
[1617231600000, 14]
],
[
[1609459200000, 30],
[1612137600000, 501],
[1614556800000, 81],
[1617231600000, 82],
]
];
const res = Object.values(data.flat().reduce((acc, [x,y])=>{
(acc[x] ??= {x, y: 0}).y += y;
return acc;
}, {}));
console.log(res);
关于javascript - Javascript中如何将数组的数组转换为对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68624401/