【问题标题】:Addition of values inside an Array according to certain value [closed]根据特定值在数组中添加值[关闭]
【发布时间】:2023-02-06 19:22:38
【问题描述】:

我有一个这样的数组:

let array = [[0, 1, 4.75], [0, 1, 2.12], [0, 3, 8.1]];

预期输出:

let expectedOutput = [[0, 1, 6.87], [0, 3, 8.1]];

在这种情况下,4.75 + 2.12 已被求和,因为前两个值匹配 [0, 1]

我想查找子数组中的第一个和第二个值,并对具有相同的第一个和第二个值的所有子数组的第三个值求和。你能帮帮我吗?

【问题讨论】:

  • 你尝试过什么吗?
  • 很多东西......因为数据由巨大的数组组成,我的尝试都没有给我我需要的结果而且它们非常慢......而且我没有完整的 JS 知识...... :(
  • 你究竟希望这发生在什么情况下?检查外部数组中的所有数组并将其汇总?检查 1&2、3&4、5&6 等?检查 1&2、2&3、3&4?请更具体,并提供您尝试过的示例。
  • “我的尝试都没有给我需要的结果,而且它们非常慢……”- 标准“速度”是无关紧要的,只要结果甚至不符合您的需要即可。并用于开发任何这种方法首先得到了预期的结果,“巨大的”数组也不应该发挥作用——你可以尝试想出一些适用于你在这里给出的相当小的示例数据集的东西.如果它需要在速度方面进行改进,我们仍然可以稍后再专注于此。
  • 我想查找子数组中的第一个和第二个值,并对具有相同的第一个和第二个值的所有子数组的第三个值求和。

标签: javascript arrays sum


【解决方案1】:

构建结果时,检查当前元素是否与前一个元素匹配,然后只添加值或整个元素:

let array = [[0, 1, 4.75], [0, 1, 2.12], [0, 3, 8.1]];

const result = array.reduce( (r, [x,y,v], i) => (i = r.find(e => e[0] === x && e[1] === y), i ? i[2] += v : r.push([x,y,v]), r), [])

console.log(result)

【讨论】:

  • 非常感谢……工作起来很有魅力。
【解决方案2】:

const array = [
  [0, 1, 4.75],
  [0, 1, 2.12],
  [0, 3, 8.1]
];

// groups arrays by first and second item
const groups = {}

for (const [a1, a2, a3] of array) {
  if (!(a1 in groups)) {
    groups[a1] = {}
  }
  if (!(a2 in groups[a1])) {
    groups[a1][a2] = []
  }
  groups[a1][a2].push(a3)
}

// sum the third item

const result = []

for (const a1 in groups) {
  for (const a2 in groups[a1]) {
    const sum = groups[a1][a2].reduce((s, c) => s + c, 0)
    result.push([+a1, +a2, sum])
  }
}

console.log(result)

【讨论】:

    猜你喜欢
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 2021-12-26
    • 1970-01-01
    相关资源
    最近更新 更多