1. 遍历递归
~function(){
let myFlat = function() {
let res = [],
_this = this,
fn = arr => {
for(let i = 0;i<arr.length;i++) {
let item = arr[i];
if(Array.isArray(item)) {
fn(item);
continue;
}
res.push(item)
}
}
fn(_this);
return res;
}
Array.prototype.myFlat = myFlat
}()
2.toString
function flatten(arr) {
return arr.toString().split(',')
}
3.reduce
function flatten(arr) {
if(!Array.isArray(arr)) {
throw Error('not array')
}
return arr.reduce((prev,next) => {
return prev.concat(Array.isArray(next)? flatten(next) : next)
},[])
}
4.扩展运算符
function flatten(arr) {
if(!Array.isArray(arr)) {
throw Error('not array')
}
while(arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr)
}
return arr
}
5. Array.prototype.flat
arr.flat(Infinity)