Skip to content

Instantly share code, notes, and snippets.

@buwilliams
Created June 23, 2017 12:44
Show Gist options
  • Save buwilliams/7a33c4ef2c047a50f1753dd6987ddc60 to your computer and use it in GitHub Desktop.
Save buwilliams/7a33c4ef2c047a50f1753dd6987ddc60 to your computer and use it in GitHub Desktop.
Example of how to flatten a javascript array with no dependencies
// 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