Flatten

Benchmark created by Fen on


Setup

function flattenArray(arr) {
    if (Array.isArray(arr)) {
    return arr.reduce(function(done,curr){
      return done.concat(flattenArray(curr));
      }, []);
    } else {
      return arr;
    }
  }
  
  var flattenReduceArray = (result, item) => Array.isArray(item) ? item.reduce(flattenReduceArray, result) : [...result, item]
  
  function flattenReduceArrayES5 (result, item) {
    if (Array.isArray(item)) {
      return item.reduce(flattenReduceArrayES5, result)
    } else {
      result.push(item);
      return result;
    }
  }
  
  var flattenConcat = function(a, level) {
    for (var i = 0, a = a.slice(); a.some(Array.isArray) && (i != level); i++)
    a = Array.prototype.concat.apply([], a);
    return a;
  }
  
  var arrayTest = [[[[2]]],[[1]],[3]];

Test runner

Ready to run.

Testing in
TestOps/sec
flattenReduceArray
arrayTest.reduce(flattenReduceArray, [])
ready
flattenArray
flattenArray(arrayTest)
ready
flattenReduceArrayES5
arrayTest.reduce(flattenReduceArrayES5, [])
ready
flattenConcat
flattenConcat(arrayTest)
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.