参考文章
法1:朴质的递归实现
遍历数组的每一项,如果每一项依然是数组,就继续调用递归方法;如果是基本数据类型,就添加到结果数组里面
const a = [1, [2, [3, [4, 5]]]];const flatten = (arr) => {let result = [];for (let i = 0; i < arr.length; i++) {if (Array.isArray(arr[i])) {result = result.concat(flatten(arr[i]));} else {result.push(arr[i]);}}return result;};console.log(flatten(a));
法2:reduce
const flatten = (arr) => {return arr.reduce((prev,next)=>{return prev.concat(Array.isArray(next)?flatten(next):next)},[]);};console.log(flatten(a));
法3:扩展运算符
const flatten = (arr) => {while(arr.some(item=>Array.isArray(item))){arr = [].concat(...arr);}return arr;};console.log(flatten(a));
法4:arr.toString.split(‘,’)
- 由于数组会默认带一个 toString的方法,所以可以把数组直接转换成逗号分隔的字符串
- 然后再用 split方法把字符串重新转换为数组,如下面的代码所示。
const flatten = (arr) => {return arr.toString().split(',')};console.log(flatten(a));