From 56c5ebcb7190fc72d46e8ff4cbcabbeb0d1eb33d Mon Sep 17 00:00:00 2001 From: jdalton Date: Tue, 10 Mar 2015 21:31:24 -0700 Subject: [PATCH] Ensure the result of `_.difference` is based on the values of the first param only. [#1038] --- lodash.src.js | 20 +++++++------------- test/test.js | 19 ++++++++++++------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/lodash.src.js b/lodash.src.js index efc25871a..617dbb345 100644 --- a/lodash.src.js +++ b/lodash.src.js @@ -4363,18 +4363,10 @@ * _.difference([1, 2, 3], [4, 2]); * // => [1, 3] */ - function difference() { - var args = arguments, - index = -1, - length = args.length; - - while (++index < length) { - var value = args[index]; - if (isArray(value) || isArguments(value)) { - break; - } - } - return baseDifference(value, baseFlatten(args, false, true, ++index)); + function difference(array) { + return (isArray(array) || isArguments(array)) + ? baseDifference(array, baseFlatten(arguments, false, true, 1)) + : []; } /** @@ -5570,7 +5562,9 @@ * // => [3] */ function without(array) { - return baseDifference(array, baseSlice(arguments, 1)); + return (isArray(array) || isArguments(array)) + ? baseDifference(array, baseSlice(arguments, 1)) + : []; } /** diff --git a/test/test.js b/test/test.js index b92c436bf..a833f02e4 100644 --- a/test/test.js +++ b/test/test.js @@ -3740,11 +3740,12 @@ deepEqual(_.difference([1, NaN, 3], largeArray), [1, 3]); }); - test('should ignore values that are not arrays or `arguments` objects', 3, function() { - var array = [0, 1, null, 3]; - deepEqual(_.difference(array, 3, null, { '0': 1 }), array); - deepEqual(_.difference(null, array, null, [2, 1]), [0, null, 3]); - deepEqual(_.difference(array, null, args, null), [0, null]); + test('should ignore values that are not arrays or `arguments` objects', 4, function() { + var array = [1, null, 3]; + deepEqual(_.difference(args, 3, { '0': 1 }), [1, 2, 3]); + deepEqual(_.difference(null, array, 1), []); + deepEqual(_.difference(array, args, null), [null]); + deepEqual(_.difference('abc', array, 'b'), []); }); }(1, 2, 3)); @@ -15173,7 +15174,11 @@ var array = [1, 2, 3, 1, 2, 3]; deepEqual(_.without(array, 1, 2), [3, 3]); }); - }()); + + test('should treat string values for `array` as empty', 1, function() { + deepEqual(_.without('abc', 'b'), []); + }); + }(1, 2, 3)); /*--------------------------------------------------------------------------*/ @@ -16134,7 +16139,7 @@ return '`_.' + methodName + '` should accept falsey primary arguments'; } - deepEqual(_.difference(null, array), array, message('difference')); + deepEqual(_.difference(null, array), [], message('difference')); deepEqual(_.intersection(null, array), array, message('intersection')); deepEqual(_.union(null, array), array, message('union')); deepEqual(_.xor(null, array), array, message('xor'));