Skip to content

Instantly share code, notes, and snippets.

@djalmabright
Created April 30, 2019 09:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save djalmabright/45ff0e8dbb4d44ee13d882c99463f981 to your computer and use it in GitHub Desktop.
Save djalmabright/45ff0e8dbb4d44ee13d882c99463f981 to your computer and use it in GitHub Desktop.
Javascript Console implementation to flatten an array of arbitrarily nested arrays of integers into a flat array of integers.
'use strict';
// exam if the array is already flattened
// returns true/false
const isArrayFlattened = function($array) {
if (!$array) {
return true;
}
for (const item of $array) {
if (item instanceof Array) {
return false;
}
}
return true;
};
// main function to flatten the arrays. The use of Array.prototype.reduce is so that each iteration
// a (potential) layer of square brackets is removed.
// This is ensured by that [1].concat(2).concat(3) returns the same value as
// [1].concat([2, 3]), which is [1, 2, 3] for both
const flatten = function($array) {
while (!isArrayFlattened($array)) {
$array = $array.reduce((previous, item) => {
return previous.concat(item);
}, []);
}
return $array;
};
console.log(flatten([])); // []
console.log(flatten([1, [2], 3])); // [1, 2, 3]
console.log(flatten([[1, 2], 3])); // [1, 2, 3]
console.log(flatten([[[1], 2], 3])); // [1, 2, 3]
console.log(flatten([[[[1]], 2], 3])); // [1, 2, 3]
console.log(flatten([[1], [2], [3]])); // [1, 2, 3]
console.log(flatten([[[[1], [2]], [3]]])); // [1, 2, 3]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment