You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.3 KiB
JavaScript
51 lines
1.3 KiB
JavaScript
9 years ago
|
var arraySum = require('../internal/arraySum'),
|
||
|
baseCallback = require('../internal/baseCallback'),
|
||
|
baseSum = require('../internal/baseSum'),
|
||
|
isArray = require('../lang/isArray'),
|
||
|
isIterateeCall = require('../internal/isIterateeCall'),
|
||
|
toIterable = require('../internal/toIterable');
|
||
|
|
||
|
/**
|
||
|
* Gets the sum of the values in `collection`.
|
||
|
*
|
||
|
* @static
|
||
|
* @memberOf _
|
||
|
* @category Math
|
||
|
* @param {Array|Object|string} collection The collection to iterate over.
|
||
|
* @param {Function|Object|string} [iteratee] The function invoked per iteration.
|
||
|
* @param {*} [thisArg] The `this` binding of `iteratee`.
|
||
|
* @returns {number} Returns the sum.
|
||
|
* @example
|
||
|
*
|
||
|
* _.sum([4, 6]);
|
||
|
* // => 10
|
||
|
*
|
||
|
* _.sum({ 'a': 4, 'b': 6 });
|
||
|
* // => 10
|
||
|
*
|
||
|
* var objects = [
|
||
|
* { 'n': 4 },
|
||
|
* { 'n': 6 }
|
||
|
* ];
|
||
|
*
|
||
|
* _.sum(objects, function(object) {
|
||
|
* return object.n;
|
||
|
* });
|
||
|
* // => 10
|
||
|
*
|
||
|
* // using the `_.property` callback shorthand
|
||
|
* _.sum(objects, 'n');
|
||
|
* // => 10
|
||
|
*/
|
||
|
function sum(collection, iteratee, thisArg) {
|
||
|
if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {
|
||
|
iteratee = undefined;
|
||
|
}
|
||
|
iteratee = baseCallback(iteratee, thisArg, 3);
|
||
|
return iteratee.length == 1
|
||
|
? arraySum(isArray(collection) ? collection : toIterable(collection), iteratee)
|
||
|
: baseSum(collection, iteratee);
|
||
|
}
|
||
|
|
||
|
module.exports = sum;
|