From 858d52f66e7c87be08ff3b90a4dd17f06684b445 Mon Sep 17 00:00:00 2001 From: David Ra Date: Mon, 29 Feb 2016 07:47:20 -0500 Subject: [PATCH] feat(flatten): add variable-arity, add test Closes #17 --- src/flatten.js | 11 +++++------ test/flatten.test.js | 9 +++++++++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/flatten.js b/src/flatten.js index 25ed789d..de052030 100644 --- a/src/flatten.js +++ b/src/flatten.js @@ -3,14 +3,13 @@ export default flatten /** * Original Source: http://stackoverflow.com/a/15030117/971592 * - * This method will flatten an array given to it. + * This method will flatten arrays given to it. * - * @param {Array} arr - The array to flatten + * @param {...Array} arrays - The array(s) to flatten * @return {Array} - The flattened array */ -function flatten(arr) { - return arr.reduce(function flattenReducer(flat, toFlatten) { - return flat.concat(Array.isArray(toFlatten) ? flatten(toFlatten) : toFlatten) +function flatten() { + return [].slice.call(arguments).reduce(function flattenReducer(flat, toFlatten) { + return flat.concat(Array.isArray(toFlatten) ? flatten.apply(null, toFlatten) : toFlatten) }, []) } - diff --git a/test/flatten.test.js b/test/flatten.test.js index 6376d96f..c9a04840 100644 --- a/test/flatten.test.js +++ b/test/flatten.test.js @@ -7,3 +7,12 @@ test('flattens an array of arrays', t => { const actual = flatten(original) t.same(actual, expected) }) + +test('flattens multiple arrays', t => { + const original1 = [[1, 2], 3, [4, 5]] + const original2 = ['A', 'b', ['C', ['d', 'E']]] + const original3 = [true, false, true, false] + const expected = [1, 2, 3, 4, 5, 'A', 'b', 'C', 'd', 'E', true, false, true, false] + const actual = flatten(original1, original2, original3) + t.same(actual, expected) +})