Method 1:手写递归
function flatten(arr) {
const result = [];
arr.forEach((i) => {
if (Array.isArray(i))
result.push(...flatten(i));
else
result.push(i);
})
return result;
}
// Usage
const problem = [1, 2, 3, [4, 5, [6, 7], 8, 9]];
flatten(problem); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
Method 2:ES6提供的Array.prototype.flat( ) 方法
let arr = [10,[1,2],[12,[3,4,[5,6,16]],6,6],7];
arr = arr.flat(Infinity);
Method 3:Array.prototype.toString( ) 方法
let arr = [10,[1,2],[12,[3,4,[5,6,16]],6,6],7];
arr = arr.toString().split(',').map(item => Number(item))
Method 4:JSON.stringify( ) 方法
let arr = [10,[1,2],[12,[3,4,[5,6,16]],6,6],7];
arr = JSON.stringify(arr).replace(/(\[|\])/g, '').split(',').map(item => Number(item))
Method 5:Array.prototype.some( ) 方法
let arr = [10,[1,2],[12,[3,4,[5,6,16]],6,6],7];
while(arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr)
}
Method 6:Array.prototype.reduce( ) 方法
function flatten(arr){
var arr = arr || [];
return arr.reduce(function(prev, next){
return Object.prototype.toString.call(next) === '[object Array]' ? prev.concat(flatten(next)) : prev.concat(next);
},[])
}