Script Preparation code:
x
 
function concatMap1(xs, fn) {
    return xs.map(v => fn(v)).reduce((acc, arr) => Array.isArray(arr) ? acc.concat(arr) : acc.concat([arr]), []);
}
function concatMap2(xs, fn) {
    var res = [];
    for (var i = 0; i < xs.length; i++) {
        var x = fn(xs[i], i);
        if (Array.isArray(x)) res.push.apply(res, x);
        else res.push(x);
    }
    return res;
}
Tests:
  • concat 1

     
    concatMap1(Array(1000).fill(0), v => [v-1, v, v+1])
  • concat 2

     
    concatMap2(Array(1000).fill(0), v => [v-1, v, v+1])
  • concat 1 small to large

     
    concatMap1([1, 2, 3, 4], v => Array(1000).fill(v))
  • concat 2 small to large

     
    concatMap2([1, 2, 3, 4], v => Array(1000).fill(v))
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    concat 1
    concat 2
    concat 1 small to large
    concat 2 small to large

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: 5 years ago)
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36
Chrome 79 on Mac OS X 10.14.6
View result in a separate tab
Test name Executions per second
concat 1 515.3 Ops/sec
concat 2 6537.8 Ops/sec
concat 1 small to large 50563.7 Ops/sec
concat 2 small to large 41234.9 Ops/sec