Skip to content
This repository was archived by the owner on Feb 20, 2019. It is now read-only.

Commit 7268af2

Browse files
author
Kent C. Dodds
committed
Merge pull request #18 from davidrayoussef/pr/variadic-flatten
feat(flatten): Implement variable arity for flatten function, add test
2 parents b4c4846 + 858d52f commit 7268af2

File tree

2 files changed

+14
-6
lines changed

2 files changed

+14
-6
lines changed

src/flatten.js

+5-6
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,13 @@ export default flatten
33
/**
44
* Original Source: http://stackoverflow.com/a/15030117/971592
55
*
6-
* This method will flatten an array given to it.
6+
* This method will flatten arrays given to it.
77
*
8-
* @param {Array} arr - The array to flatten
8+
* @param {...Array} arrays - The array(s) to flatten
99
* @return {Array} - The flattened array
1010
*/
11-
function flatten(arr) {
12-
return arr.reduce(function flattenReducer(flat, toFlatten) {
13-
return flat.concat(Array.isArray(toFlatten) ? flatten(toFlatten) : toFlatten)
11+
function flatten() {
12+
return [].slice.call(arguments).reduce(function flattenReducer(flat, toFlatten) {
13+
return flat.concat(Array.isArray(toFlatten) ? flatten.apply(null, toFlatten) : toFlatten)
1414
}, [])
1515
}
16-

test/flatten.test.js

+9
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,12 @@ test('flattens an array of arrays', t => {
77
const actual = flatten(original)
88
t.same(actual, expected)
99
})
10+
11+
test('flattens multiple arrays', t => {
12+
const original1 = [[1, 2], 3, [4, 5]]
13+
const original2 = ['A', 'b', ['C', ['d', 'E']]]
14+
const original3 = [true, false, true, false]
15+
const expected = [1, 2, 3, 4, 5, 'A', 'b', 'C', 'd', 'E', true, false, true, false]
16+
const actual = flatten(original1, original2, original3)
17+
t.same(actual, expected)
18+
})

0 commit comments

Comments
 (0)