【问题标题】:Merge values of an array and sum duplicate values合并数组的值并对重复值求和
【发布时间】:2018-07-08 21:36:58
【问题描述】:

我知道有一些适用于 vanilla JS 的解决方案,但我似乎无法在 Framer 的 Coffeescript 中实现这些解决方案。

我正在尝试遍历嵌套数组的数组,并在添加第二项的值时合并嵌套数组的第一项的重复值。

所以例如下面的数组将被合并为一个

fruit = [
  ["bananas", 2],
  ["apples", 1],
  ["oranges", 2],
  ["bananas", 1],
  ["oranges", 2],
  ["apples", 3]
]

将导致以下结果:

combinedFruit = [
  ["bananas", 3],
  ["apples", 4],
  ["oranges", 4]
]

【问题讨论】:

    标签: arrays coffeescript sum


    【解决方案1】:

    这类事情的常用方法是使用一个对象来跟踪你的总和:

    sum_fruit_counters = (obj, [fruit, n]) ->
      obj[fruit] = 0 if fruit !of obj
      obj[fruit] += n
      obj
    obj = fruit.reduce(sum_fruit_counters, { })
    

    或者如果您愿意:

    sum_fruit_counters = (obj, [fruit, n]) ->
      obj[fruit] = (obj[fruit] || 0) + n
      obj
    obj = fruit.reduce(sum_fruit_counters, { })
    

    但这会给您留下一个对象,而不是您想要的数组数组。你可以使用Object.entries 来处理这个问题:

    a = Object.entries(fruit.reduce(sum_fruit_counters, { }))
    

    或者用一个简单的循环手动完成:

    obj = fruit.reduce(sum_fruit_counters, { })
    a   = ([k, v] for k, v of obj)
    

    您也可以使用循环代替reduce,逻辑几乎相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      • 2016-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多