Created
June 23, 2017 12:44
-
-
Save buwilliams/7a33c4ef2c047a50f1753dd6987ddc60 to your computer and use it in GitHub Desktop.
Example of how to flatten a javascript array with no dependencies
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
// Run with browser devtools or nodejs | |
function flat (array) { | |
var out = [] | |
array || (array = []) | |
function recur (internalArray) { | |
for (var i=0; i<internalArray.length; i++) { | |
var item = internalArray[i] | |
if (Array.isArray(item)) { | |
recur(item) | |
} else { | |
out.push(item) | |
} | |
} | |
} | |
recur(array) | |
return out | |
} | |
// Mini test framework so no deps used | |
function test (description, input, expectFn) { | |
var result | |
try { result = flat(input) } catch(e) { result = e } | |
var expectedResult = expectFn(result, input); | |
if (!expectedResult) { | |
console.error('Test failed: ', description, ' got ', result) | |
} else { | |
console.log('Test passed: ', description) | |
} | |
} | |
function isSameArray (arrayA, arrayB) { | |
return (arrayA.length === arrayB.length && arrayA.every((v,i) => v === arrayB[i])) | |
} | |
test('null returns empty array', null, function(result) { | |
return (result.length === 0) ? true : false | |
}) | |
test('undefined returns empty array', undefined, function(result) { | |
return (result.length === 0) ? true : false | |
}) | |
test('empty array returns empty array', [], function(result) { | |
return (result.length === 0) ? true : false | |
}) | |
test('flat array returns flat array', [1, 2, 3], function(result, input) { | |
return isSameArray(result, input) | |
}) | |
test('nested array returns nested array', [[1,2,[3]],4], function(result, input) { | |
return isSameArray(result, [1, 2, 3, 4]) | |
}) | |
test('nested null array returns nested array', [[null,null,[]],null], function(result, input) { | |
return isSameArray(result, [null,null,null]) | |
}) | |
test('nested empty arrays returns empty array', [[[],[],[[[[]]]]],[]], function(result, input) { | |
return isSameArray(result, []) | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment