Skip to content

Instantly share code, notes, and snippets.

@martin-mok
Last active January 13, 2020 00:20
Show Gist options
  • Select an option

  • Save martin-mok/31c7be00e2351a429fcbe7f5f2097604 to your computer and use it in GitHub Desktop.

Select an option

Save martin-mok/31c7be00e2351a429fcbe7f5f2097604 to your computer and use it in GitHub Desktop.
freecodecamp: Steamroller flatten array

flatten array by recursion.

ECMA Specifications 2019 has native supports
Flatten Arrays in Vanilla JavaScript with flat() and flatMap()

const flatAnimals = animals.flat(Infinity);

Flatten Array using Array.flat() in JavaScript - Samantha Ming
flat Alternative MDN
Advanced solution: flatten arrays recursively
Algorithm Steamroller
By reduce

const flatten = array => array
  .reduce((a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []);

flat with 1 depth

Flattening multidimensional Arrays in JavaScript

freecodecamp soln

Offical soln, Not so good!

function steamrollArray(arr) {
  if (!Array.isArray(arr)) {
    return [arr];
  }
  var out = [];
  arr.forEach(function(e) {
    steamrollArray(e).forEach(function(v) {
      out.push(v);
    });
  });
  return out;
}

freeCodeCamp Challenge Guide: Steamroller
Soln 1: using push and for/forEach loop

function steamrollArray(arr) {
  var newArray = [];
  function flatten(arr) {
    arr.forEach(function(item) {
      if (!Array.isArray(item)) {
        newArray.push(item);
      }
      else {
       flatten(item);
      }
   });
 }
flatten(arr);
return newArray;
}

Soln 2: using spread operator ,some, and concat

function steamrollArray(arr) {
  let flat = [].concat(...arr);
  return flat.some(Array.isArray) ? steamrollArray(flat) : flat;
}

Soln 4: It is bit interesting method

function steamrollArray(arr) {
  return arr
    .toString()
    .replace(",,", ",") // "1,2,,3" => "1,2,3"
    .split(",") // ['1','2','3']
    .map(function(v) {
      if (v == "[object Object]") {
        // bring back empty objects
        return {};
      } else if (isNaN(v)) {
        // if not a number (string)
        return v;
      } else {
        return parseInt(v); // if a number in a string, convert it
      }
    });
}

stackoverflow:

  1. JavaScript flattening an array of arrays of objects
  2. Merge/flatten an array of arrays
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment