sumBy [总和]
[用中文]在使用 提供的函数将每个元素映射到值之后,返回数组的总和。
使用 Array.prototype.map()
将每个元素映射到返回的值 fn
, Array.prototype.reduce()
要将每个值添加到一个累加器中,以一个值初始化的值 0
.
typescript
const sumBy = <T = AnyObject>(arr: T[], fn: string | ((a: T) => number)) => {
return arr
.map(typeof fn === "function" ? fn : (val: AnyObject) => val[fn])
.reduce((acc, val) => acc + val, 0);
};
typescript
sumBy([{ n: 4 }, { n: 2 }, { n: 8 }, { n: 6 }], (o) => o.n); // 20
sumBy([{ n: 4 }, { n: 2 }, { n: 8 }, { n: 6 }], "n"); // 20