Skip to content

Instantly share code, notes, and snippets.

@alvelig
Last active December 1, 2017 05:02
Show Gist options
  • Save alvelig/1371898207d0c4ed25c204fee9ccaba8 to your computer and use it in GitHub Desktop.
Save alvelig/1371898207d0c4ed25c204fee9ccaba8 to your computer and use it in GitHub Desktop.
Flatten
var _ = require('lodash');
var concat = function (arr) {
var args = arguments,
len = args.length,
ArrayTypeOf = "[object Array]",
toString = Object.prototype.toString,
push = Array.prototype.push;
for (var i = 1; i < len; i++) {
if (toString.call(args[i]) === ArrayTypeOf) {
push.apply(arr, args[i]);
} else {
arr.push(args[i]);
}
}
return arr;
};
Array.prototype.concat = function(arr) {
return concat(this, arr);
}
function stupidFln(arr) {
let result = [];
_.forEach(arr, (a) => result = result.concat(_.isArray(a) ? stupidFln(a) : a));
return result;
}
Array.prototype.stupidFln = function() {
return stupidFln(this);
}
const oneLinerFln = (arr) => arr.reduce((a, b) => a.concat(Array.isArray(b) ? oneLinerFln(b) : b), [])
Array.prototype.oneLinerFln = function() {
return oneLinerFln(this);
}
const A = [[1,2,[[3,[4]]],5]];
const expected = [1,2,3,4,5];
console.assert(_.isEqual(expected, A.stupidFln()) && _.isEqual(expected, A.oneLinerFln()), "DON'T TOUCH TESTS, FIX YOUR CODE");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment