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)