diff --git a/test/collections.js b/test/collections.js index 87d5ccfba..b187af236 100644 --- a/test/collections.js +++ b/test/collections.js @@ -71,8 +71,14 @@ $(document).ready(function() { }); test('collections: reduceRight', function() { - var list = _.foldr([1, 2, 3], function(memo, num){ return memo + num; }, ''); - equals(list, '321', 'can perform right folds'); + var list = _.reduceRight(["foo", "bar", "baz"], function(memo, str){ return memo + str; }, ''); + equals(list, 'bazbarfoo', 'can perform right folds'); + + var list = _.foldr(["foo", "bar", "baz"], function(memo, str){ return memo + str; }, ''); + equals(list, 'bazbarfoo', 'aliased as "foldr"'); + + var list = _.foldr(["foo", "bar", "baz"], function(memo, str){ return memo + str; }); + equals(list, 'bazbarfoo', 'default initial value'); }); test('collections: detect', function() { diff --git a/underscore.js b/underscore.js index 2385da32c..c15c40217 100644 --- a/underscore.js +++ b/underscore.js @@ -112,7 +112,9 @@ _.reduceRight = _.foldr = function(obj, iterator, memo, context) { if (nativeReduceRight && obj.reduceRight === nativeReduceRight) { if (context) iterator = _.bind(iterator, context); - return obj.reduceRight(iterator, memo); + var args = [iterator]; + if (memo !== undefined) args.push(memo); + return obj.reduceRight.apply(obj, args); } var reversed = (_.isArray(obj) ? obj.slice() : _.toArray(obj)).reverse(); return _.reduce(reversed, iterator, memo, context);