方法1:直接调用已有flat函数
var arr = [1,[2,3],[4,[5,6]]] var arr_flat = arr.flat(Infinity)
flat()默认只会“拉平”一层,如果想要“拉平”多层的嵌套数组,可以将flat()方法的参数写成一个整数,表示想要拉平的层数,默认为1。如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数。
方法2:使用toString()方法
var arr = [1,[2,3],[4,[5,6]]] var arr_flat = arr.toString().split(',') //["1", "2", "3", "4", "5", "6"] 字符串类型的 let arr_flat = arr.toString().split(',').map((val)=>{ return parseInt(val) }) //[1, 2, 3, 4, 5, 6] 数字类型的
如果不使用map函数创建出来的数组是字符串类型的,需要调用parseInt()来转为数字类型
方法3:递归
var arr = [1,[2,3],[4,[5,6]]] function fn(arr){ let arr1 = [] arr.forEach((val)=>{ if(val instanceof Array){ arr1 = arr1.concat(fn(val)) } else{ arr1.push(val) } }) return arr1 } console.log(fn(arr)) //[1, 2, 3, 4, 5, 6]
方法4:展开运算符...
let arr = [[1, 2, [3, 4], 5], [6, 7, 8], [[9, 10], 11]] function flat(arr) { while (arr.some(item => Array.isArray(item))) { arr = [].concat(...arr); } return arr; } console.log(flat(arr)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
方法5:reduce
var arr = [1,[2,3],[4,[5,6]]] function fn(arr) { return arr.reduce((res, element) => { return res.concat(Array.isArray(element) ? fn(element) : element); }, []) } console.log(fn(arr)) [1, 2, 3, 4, 5, 6]