Skip to content

Instantly share code, notes, and snippets.

@victorouse
Created March 4, 2018 08:22
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save victorouse/45abfb4a2857041ea5bf1c014c572615 to your computer and use it in GitHub Desktop.
Save victorouse/45abfb4a2857041ea5bf1c014c572615 to your computer and use it in GitHub Desktop.
Facebook Interview: Flatten an array
/*
Inputs
-------
(1): Empty array
--
[]
=> []
(2): Flattened already
--
[1]
=> [1]
(3): One level deep
--
[[1]]
=> [1]
(4): Mixed with one level deep
--
[1, [2]]
=> [1, 2]
(5): One level deep multiple arrays
--
[[1, 2], [3, 4]]
=> [1, 2, 3, 4]
(6): Two levels deep
--
[[1, [2, 3]], [4, [5, 6, 7]]]
=> [1, 2, 3, 4, 5, 6, 7]
(7): Arbitrary depth
--
[1, [2, [[3]], [4, 5, 6]], [[[[[[7, 8, 9]]]]]]]
=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
*/
function flatten(arr) {
return arr.reduce((flatArray, current) => {
if (Array.isArray(current)) {
return flatArray.concat(flatten(current));
}
flatArray.push(current);
return flatArray;
}, []);
}
function flattenIterative(arr) {
const flatArray = [];
let original = [...arr];
while (original.length > 0) {
const current = original.shift();
if (Array.isArray(current)) {
original = current.concat(original);
} else {
flatArray.push(current);
}
}
return flatArray;
}
const input1 = [];
console.log('result', flatten(input1));
console.log('result', flattenIterative(input1));
const input2 = [1];
console.log('result', flatten(input2));
console.log('result', flattenIterative(input2));
const input3 = [[1]];
console.log('result', flatten(input3));
console.log('result', flattenIterative(input3));
const input4 = [1, [2]];
console.log('result', flatten(input4));
console.log('result', flattenIterative(input4));
const input5 = [[1, 2], [3, 4]];
console.log('result', flatten(input5));
console.log('result', flattenIterative(input5));
const input6 = [[1, [2, 3]], [4, [5, 6, 7]]];
console.log('result', flatten(input6));
console.log('result', flattenIterative(input6));
const input7 = [1, [2, [[3]], [4, 5, 6]], [[[[[[7, 8, 9]]]]]]];
console.log('result', flatten(input7));
console.log('result', flattenIterative(input7));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment