diff --git a/lib/array.js b/lib/array.js index 50211ee..9262e0f 100644 --- a/lib/array.js +++ b/lib/array.js @@ -35,7 +35,6 @@ function at(a, i) { return a[a.length + i]; } -// TODO make this work for non-array objects function compact(a) { var b = [] , i = a.length @@ -50,10 +49,17 @@ function first(a) { return a[0]; } // Based on underscore.js's flatten function flatten(a) { - return a.reduce(function(initial, elem) { - if (elem && elem.flatten) initial = initial.concat(elem.flatten()); - else initial.push(elem); - return initial; + return a.reduce(function(flat, val) { + if (val && typeof val.flatten === 'function') { + flat = flat.concat(val.flatten()); + } + else if (Array.isArray(val)) { + flat = flat.concat(flatten(val)); + } + else { + flat.push(val); + } + return flat; }); }