diff --git a/test/collections.js b/test/collections.js index 4e7c7ab6b..87d5ccfba 100644 --- a/test/collections.js +++ b/test/collections.js @@ -65,6 +65,9 @@ $(document).ready(function() { sum = _([1, 2, 3]).reduce(function(sum, num){ return sum + num; }, 0); equals(sum, 6, 'OO-style reduce'); + + var sum = _.reduce([1, 2, 3], function(sum, num){ return sum + num; }); + equals(sum, 6, 'default initial value'); }); test('collections: reduceRight', function() { diff --git a/underscore.js b/underscore.js index 6bd1ee3ca..5f57bc951 100644 --- a/underscore.js +++ b/underscore.js @@ -94,10 +94,16 @@ _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) { if (nativeReduce && obj.reduce === nativeReduce) { if (context) iterator = _.bind(iterator, context); - return obj.reduce(iterator, memo); + var args = [iterator]; + if (memo !== undefined) args.push(memo); + return obj.reduce.apply(obj, args); } each(obj, function(value, index, list) { - memo = iterator.call(context, memo, value, index, list); + if (memo === undefined && index == 0) { + memo = value; + } else { + memo = iterator.call(context, memo, value, index, list); + } }); return memo; };