跳到主要内容

sumBy [总和]

TS JS Deno

[用中文]在使用提供的函数将每个元素映射到值之后,返回数组的总和。

使用 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