Array flattening concept
Array flattening is the process of turning a multidimensional array into a one-dimensional array
[1, [2, 3, [4, 5]] ------> [1, 2, 3, 4, 5]Copy the code
implementation
1. reduce
Iterate over each item of the group, recursively if the value is array, otherwise concat.
function flatten(arr) { return arr.reduce((result, item)=> { return result.concat(Array.isArray(item) ? flatten(item) : item); } []); }Copy the code
Reduce is a method of arrays that accepts a function as an accumulator, where each value in the array (from left to right) starts to shrink and eventually evaluates to a value.
Reduce takes two parameters: a callback function and an initial value passed to total
Arr. Reduce ((total, item)=> {return total + item; }, 0);Copy the code
2. toString & split
Call the toString method of the array, turn the array into a string and then split it back into an array
function flatten(arr) { return arr.toString().split(',').map(function(item) { return Number(item); })}Copy the code
Because each item in a split array is a string, you need to use a map method to traverse the array to convert each item to a numeric value
3. join & split
Like toString above, a Join can convert an array to a string
function flatten(arr) { return arr.join(',').split(',').map(function(item) { return parseInt(item); })}Copy the code
4. The recursion
Each item is iterated recursively, continuing if it is an array, concat otherwise
function flatten(arr) { var res = []; arr.map(item => { if(Array.isArray(item)) { res = res.concat(flatten(item)); } else { res.push(item); }}); return res; }Copy the code
5. Extend operators
Es6’s extension operator turns a two-dimensional array into a one-dimensional one
[].concat(... [1, 2, 3, [4, 5]]); // [1, 2, 3, 4, 5]Copy the code
Based on this result we can do a traversal, using the extension operator once if the ARR contains an array, until there is none left.
function flatten(arr) { while(arr.some(item=>Array.isArray(item))) { arr = [].concat(... arr); } return arr; }Copy the code
conclusion
Although there are five methods, there is only one core:
Iterate over the array arr, recursively if arr[I] is an array, until arr[I] is not an array and concat the previous result.