合并数组的值并对重复值求和
Posted
技术标签:
【中文标题】合并数组的值并对重复值求和【英文标题】: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]
]
【问题讨论】:
【参考方案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
,逻辑几乎相同。
【讨论】:
以上是关于合并数组的值并对重复值求和的主要内容,如果未能解决你的问题,请参考以下文章