上源码:underscore.js
var flatten = function(input, shallow, output) { if (shallow && _.every(input, _.isArray)) { return concat.apply(output, input); } each(input, function(value) { if (_.isArray(value) || _.isArguments(value)) { shallow ? push.apply(output, value) : flatten(value, shallow, output); } else { output.push(value); } }); return output; };
自己写的一个简易递归:
/** * demo([1,3,[45,[76,34],5]]); * demo([1,3,45,5]) */ function demo(arr) { var result = []; (function f(a) { var i; for(i=0;i<a.length;i++){ if (a[i] instanceof Array) { f(a[i]); } else { result.push(a[i]); }; } })(arr); return result; }