diff --git a/lodash.js b/lodash.js index db18c2bb5..34654d26d 100644 --- a/lodash.js +++ b/lodash.js @@ -5853,13 +5853,19 @@ * console.log(array); * // => [1] */ - var concat = rest(function(array, values) { - if (!isArray(array)) { - array = array == null ? [] : [array]; + function concat() { + var length = arguments.length; + if (!length) { + return []; } - values = baseFlatten(values, 1); - return arrayConcat(array, values); - }); + var array = castArray(arguments[0]), + args = Array(length - 1); + + while (length--) { + args[length - 1] = arguments[length]; + } + return arrayConcat(array, baseFlatten(args, 1)); + } /** * Creates an array of unique `array` values not included in the other given diff --git a/test/test.js b/test/test.js index 55ee34d57..857caf848 100644 --- a/test/test.js +++ b/test/test.js @@ -3066,46 +3066,26 @@ assert.deepEqual(array, [1]); }); - QUnit.test('should return an empty array when `array` is nullish', function(assert) { - assert.expect(1); + QUnit.test('should cast non-array `array` values to arrays', function(assert) { + assert.expect(2); - var values = [, null, undefined], - expected = lodashStable.map(values, alwaysEmptyArray); + var values = [, null, undefined, false, true, 1, NaN, 'a']; + + var expected = lodashStable.map(values, function(value, index) { + return index ? [value] : []; + }); var actual = lodashStable.map(values, function(value, index) { - try { - return index ? _.concat(value) : _.concat(); - } catch (e) {} + return index ? _.concat(value) : _.concat(); }); assert.deepEqual(actual, expected); - }); - QUnit.test('should treat nullish `array` values as empty arrays', function(assert) { - assert.expect(1); - - var values = [null, undefined], - expected = lodashStable.map(values, lodashStable.constant([1, 2, [3]])); - - var actual = lodashStable.map(values, function(value) { - try { - return _.concat(value, 1, [2], [[3]]); - } catch (e) {} + expected = lodashStable.map(values, function(value) { + return [value, 2, [3]]; }); - assert.deepEqual(actual, expected); - }); - - QUnit.test('should cast non-array `array` values to arrays', function(assert) { - assert.expect(1); - - var values = [true, false, 1, NaN, 'a']; - - var expected = lodashStable.map(values, function(value) { - return [value, 2, [3]] - }); - - var actual = lodashStable.map(values, function(value) { + actual = lodashStable.map(values, function(value) { return _.concat(value, [2], [[3]]); });