javascript - Javascript中如何将数组的数组转换为对象数组?

标签 javascript arrays

我有一些数据:

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/

相关文章:

arrays - 在 Excel 中使用 If 大语句并填充表格的剩余部分

java - 具有静态最终限制的数组迭代

javascript - 将悬停背景拉伸(stretch)到全高

javascript - 读取包含整个 html 代码的 jquery 变量中标签的属性时出现问题

c - 嵌套二维结构数组的大小

php - 更新数据库表中所有行的 1 列

python - 将数组 reshape 为 rgb 矩阵

javascript - 如何将正则表达式验证应用于 JQuery 中的文本框以仅输入小数、整数(如果多个逗号分隔)

javascript - 在 DIV 内水平滚动动画表现得很奇怪

javascript - 如何在Android中添加通知徽章计数?