From 51e327f8e52511be1bb8ad434f58a7aed367f2b7 Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Mon, 1 Nov 2010 08:40:41 -0400 Subject: [PATCH] Tweaks to Issue #53 --- underscore.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/underscore.js b/underscore.js index 5f57bc951..2385da32c 100644 --- a/underscore.js +++ b/underscore.js @@ -92,14 +92,13 @@ // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available. _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) { + var initial = memo !== void 0; if (nativeReduce && obj.reduce === nativeReduce) { if (context) iterator = _.bind(iterator, context); - var args = [iterator]; - if (memo !== undefined) args.push(memo); - return obj.reduce.apply(obj, args); + return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator); } each(obj, function(value, index, list) { - if (memo === undefined && index == 0) { + if (!initial && index === 0) { memo = value; } else { memo = iterator.call(context, memo, value, index, list);