我知道有一些针对香草JS的解决方案,但我似乎无法在Framer的Coffeescript中使这些工作。
我正在尝试遍历嵌套数组的数组,并在添加第二项的值时组合嵌套数组的第一项的重复值。
因此,例如,以下数组将合并为一个
fruit = [
["bananas", 2],
["apples", 1],
["oranges", 2],
["bananas", 1],
["oranges", 2],
["apples", 3]
]
将导致以下结果:
combinedFruit = [
["bananas", 3],
["apples", 4],
["oranges", 4]
]
答案 0 :(得分:2)
这类事情的常用方法是使用一个对象来跟踪你的总和:
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
,逻辑几乎相同。