分組加總
也是實務上常見的需求,該如何使用 Ramda 實現呢 ?
Version
macOS Mojave 10.14.6
VS Code 1.37.1
Quokka 1.0.240
Ramda 0.26.1
Group Sum
import { splitEvery, map, pipe, sum, pluck } from 'ramda';
let data = [
{ title: 'FP in JavaScript', price: 100 },
{ title: 'RxJS in Action', price: 200 },
{ title: 'Speaking JavaScript', price: 300 },
{ title: 'JavaScript: The Good Parts', price: 400 },
{ title: 'Secrets of the JavaScript Ninja', price: 500 },
{ title: 'Impatient JavaScript', price: 600 },
{ title: 'You Dont Know JavaScript', price: 700 },
{ title: 'Effective JavaScript', price: 900 }
];
let fn = pr => cnt => pipe(
pluck(pr),
splitEvery(cnt),
map(sum)
);
fn('price')(3)(data); // ?
將 data
每 3 筆 group 起來,並將 price
欄位加總。
思路:
- 使用
pluck()
先把price
欄位抓出來 - 使用
splitEvery()
將 每 3 筆 group 起來 - 使用
map(sum)
將各陣列加總起來就是答案
Conclusion
- FP 思維就是將問題最小化、各個擊破、且戰且走,一個看似複雜的問題,將過程以
pluck()
、splitEvery()
、map()
與sum()
pipeline 之後,就可以順利解決了