Problem: Concat all sub-arrays of a given array.
Example input: [[0, 1], [2, 3], [4, 5]]
Example output: [0, 1, 2, 3, 4, 5]
Solution A: Use a loop
var flattened=[];
for (var i=0; i<input.length; ++i) {
var current = input[i];
for (var j=0; j<current.length; ++j)
flattened.push(current[j]);
}
Solution B: Use reduce
var flattened = input.reduce(function(a, b) {
return a.concat(b);
}, []);
Solution B looks much shorter and easier to understand, but, it seems to be much more resource-wasteful - for each element of the input, a new array is created - the concatenation of a and b. On the contrary, solution A uses a single array 'flattened', which is updated during the loop.
So, my question is: which solution is better? Is there a solution that combines the best of both worlds?
Array.prototype.concat.apply([],input)
\$\endgroup\$