From 7e3dd2b8ccf649191c0974a488e58492435715cd Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Fri, 21 Nov 2014 21:50:19 -0800 Subject: [PATCH] Cleanup previous commit. --- lodash.js | 17 +++++++++-------- test/test.js | 13 +++++++++---- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/lodash.js b/lodash.js index b7dd46f6a..7d81a7106 100644 --- a/lodash.js +++ b/lodash.js @@ -10255,21 +10255,22 @@ var retUnwrapped = /^(?:first|last)$/.test(methodName); lodash.prototype[methodName] = function() { - var args = arguments, + var value = this.__wrapped__, + args = arguments, chainAll = this.__chain__, - value = this.__wrapped__, isLazy = value instanceof LazyWrapper, - noQueue = !this.__queue__.length, - unwrap = retUnwrapped && !chainAll; + onlyLazy = isLazy && !this.__queue__.length; - if (unwrap && !isLazy) { - return lodash[methodName](this.value()); + if (retUnwrapped && !chainAll) { + return onlyLazy + ? func.call(value) + : lodash[methodName](this.value()); } if (isLazy || isArray(value)) { - var wrapper = (isLazy && noQueue) ? value : new LazyWrapper(this), + var wrapper = onlyLazy ? value : new LazyWrapper(this), result = func.apply(wrapper, args); - return unwrap ? result : new LodashWrapper(result, chainAll); + return new LodashWrapper(result, chainAll); } return this.thru(function(value) { var otherArgs = [value]; diff --git a/test/test.js b/test/test.js index 62777045f..12b77eb05 100644 --- a/test/test.js +++ b/test/test.js @@ -12703,13 +12703,18 @@ } }); - test('should work when in a lazy chain sequence, before `.last`', 1, function() { + test('should work when in a lazy chain sequence before `first` or `last`', 1, function() { if (!isNpm) { - var actual = _([1, 2, 3]).map().xor([4]).last(); - strictEqual(actual, 4); + var wrapper = _([1, 2]).map().xor([2, 3]); + + var actual = _.map(['first', 'last'], function(methodName) { + return wrapper[methodName](); + }); + + deepEqual(actual, [1, 3]); } else { - skipTest(2); + skipTest(); } }); }(1, 2, 3));