Run details:
Mozilla/5.0 (iPad; CPU OS 10_0_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A403 Safari/602.1
Mobile Safari 10
iOS 10.0.1
iPad
8 years ago
Test name Executions per second
Spread Push 275284.4 Ops/sec
Concat Reassign 310190.6 Ops/sec
Apply Push 309255.3 Ops/sec
Script Preparation code:
AخA
 
var data = [
  1, 2, 3, 4,
  [1, 2, 3, 4],
  5, 6, 7, 8,
  [1, 2, 3, 4]
];
Tests:
  • Spread Push

     
    (function fn(items){
      var result = [];
      items.forEach(item => {
        if(item.pop) {
          result.push(...fn(item));
        } else {
          result.push(item);
        }
      });
      return result;
    })(data);
  • Concat Reassign

     
    (function fn(items){
      var result = [];
      items.forEach(item => {
        if(item.pop) {
          result = result.concat(fn(item));
        } else {
          result.push(item);
        }
      });
      return result;
    })(data);
  • Apply Push

     
    (function fn(items){
      var result = [];
      items.forEach(item => {
        if(item.pop) {
          result.push.apply(result, fn(item));
        } else {
          result.push(item);
        }
      });
      return result;
    })(data);