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), []);Flattening multidimensional Arrays in JavaScript
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
- Create a new variable to keep flattened arrays.
- Create a function that will add non-array elements to the new variable, and for the ones that are array, loop through them to get the element.
- Return the flattened array.
Bonfire Steamroller
Steamroller — freeCodeCamp Richard Middleton
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
}
});
}