Created
March 4, 2018 08:22
-
-
Save victorouse/45abfb4a2857041ea5bf1c014c572615 to your computer and use it in GitHub Desktop.
Facebook Interview: Flatten an array
This file contains hidden or 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
/* | |
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