1 var arraySum = require('../internal/arraySum'),
2 baseCallback = require('../internal/baseCallback'),
3 baseSum = require('../internal/baseSum'),
4 isArray = require('../lang/isArray'),
5 isIterateeCall = require('../internal/isIterateeCall'),
6 toIterable = require('../internal/toIterable');
9 * Gets the sum of the values in `collection`.
14 * @param {Array|Object|string} collection The collection to iterate over.
15 * @param {Function|Object|string} [iteratee] The function invoked per iteration.
16 * @param {*} [thisArg] The `this` binding of `iteratee`.
17 * @returns {number} Returns the sum.
23 * _.sum({ 'a': 4, 'b': 6 });
31 * _.sum(objects, function(object) {
36 * // using the `_.property` callback shorthand
37 * _.sum(objects, 'n');
40 function sum(collection, iteratee, thisArg) {
41 if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {
44 iteratee = baseCallback(iteratee, thisArg, 3);
45 return iteratee.length == 1
46 ? arraySum(isArray(collection) ? collection : toIterable(collection), iteratee)
47 : baseSum(collection, iteratee);