_.sumBy(array, [iteratee=_.identity])
187
_.sumBy(array, [iteratee=_.identity])
_.sumBy类似_.sum方法,区别是传入一个iteratee方法在遍历数组元素的时候对每个元素调用以生成要被计算加和的值
参数
array (Array):要被遍历的数组
[iteratee=_.identity] (Function): 对每个数组元素调用的函数
返回值
(number): 返回和
例子
var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }]; _.sumBy(objects, function(o) { return o.n; }); // => 20 // The `_.property` iteratee shorthand. _.sumBy(objects, 'n'); // => 20
源代码
import baseSum from './.internal/baseSum.js' /** * This method is like `sum` except that it accepts `iteratee` which is * invoked for each element in `array` to generate the value to be summed. * The iteratee is invoked with one argument: (value). * * @since 4.0.0 * @category Math * @param {Array} array The array to iterate over. * @param {Function} iteratee The iteratee invoked per element. * @returns {number} Returns the sum. * @example * * const objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }] * * sumBy(objects, ({ n }) => n) * // => 20 */ //此方法类似sum方法,区别是传入一个iteratee方法在遍历数组元素的时候对每个元素调用以生成要被计算加和的值 function sumBy(array, iteratee) { return (array != null && array.length) ? baseSum(array, iteratee) : 0 //如果array不为null且array拥有length属性,就调用baseSum计算数组元素的和,否则返回0 } export default sumBy
baseSum
/** * The base implementation of `sum` and `sumBy`. * * @private * @param {Array} array The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {number} Returns the sum. */ //sum和sumBy方法的基础实现 function baseSum(array, iteratee) { let result for (const value of array) {//循环数组 const current = iteratee(value)//用iteratee处理当前值 if (current !== undefined) {//如果当前值不是undefined //将当前值加入result中 result = result === undefined ? current : (result + current) } } return result } export default baseSum