Created
April 30, 2019 09:29
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'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