const a = [[1], [3, [4, 5, [6, 7]]], [8], [9, [2, 10]]]
循环数组元素,若是仍是一个数组,就递归调用该方法数组
function flatten1(arr){ let res = []; for(var i=0;i<arr.length;i++){ if(Array.isArray(arr[i])){ res = res.concat(flatten1(arr[i])); } else { //注意concat 和push 方法的返回值不一样 //res=res.concat(arr[i]); res.push(ary[i]) } } return res; }
使用reduce来简化方法1的代码:函数
function flatten2(arr){ return arr.reduce((prev, cur) => prev.concat(Array.isArray(cur) ? flatten2(cur) : cur),[]) }
toString方法转成字符串,split方法把字符串切割成数组,字符串拼接方法code
function flatten3(arr){ return arr.toString().split(',').map(item=> +item) }
some则当其中一个返回true,则最终结果为true, 至关于逻辑运算符||。递归
function flatten4(arr){ while(arr.some(item => Array.isArray(item))){ arr = [].concat(...arr); } return arr; }
every方法表示当数组每一个元素在断定函数中都返回true,则最终结果为true,至关于逻辑运算符 &&字符串
function flatten5(arr) { while (!arr.every(item => typeof item === 'number' && !isNaN(item))) { arr = [].concat(...arr); console.log(arr); } return arr; } console.log(...a)