Skip to content

Instantly share code, notes, and snippets.

@Romanior
Created May 27, 2016 16:57
Show Gist options
  • Save Romanior/98373e12d2be89c36e6ae268d5ccfd18 to your computer and use it in GitHub Desktop.
Save Romanior/98373e12d2be89c36e6ae268d5ccfd18 to your computer and use it in GitHub Desktop.
// http://jsbin.com/lirise/edit?js,output
function flatten (arr){
if (!Array.isArray(arr)){
if (arguments.length === 2) {
return arr;
} else {
throw new TypeError('flatten accepts only arrays');
}
}
return arr.reduce(function(a, b) {
return a.concat(flatten(b, 'internal call'));
}, []);
}
QUnit.test( "Flatten Array", function( assert ) {
var example0 = ['Hire',[],'me'];
var example1 = [[1,2,[3,[[1]]],4]];
assert.throws( function() {flatten();});
assert.throws( function() {flatten({});});
assert.deepEqual(flatten([]), []);
assert.deepEqual(flatten(['0']), ['0']);
assert.deepEqual(flatten([0,1,3]), [0,1,3]);
assert.deepEqual(flatten([[[1]]]), [1]);
assert.deepEqual(flatten(example0), ['Hire', 'me']);
assert.deepEqual(flatten(example1), [1,2,3,1,4]);
});
@Romanior
Copy link
Author

Romanior commented May 27, 2016

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment