概念:数组扁平化是指将一个多维数组变为一维数组
思想:遍历数组每一项,如果该项为数组,
方法总结
let arr = [1,2,3,['a','b'],[[4],[[[5,6],'c']]]]
-
Array.prototype.flat
const arr1 = [0, 1, 2, [3, 4]]; console.log(arr1.flat()); // expected output: [0, 1, 2, 3, 4] const arr2 = [0, 1, 2, [[[3, 4]]]]; console.log(arr2.flat(2)); //flat 可以指定层数 ,默认为1 // expected output: [0, 1, 2, [3, 4]]
当然,好的东西一定会有兼容性,ie不支持。
-
Array.some + Array.cancat
function flat (arr) { while (arr.some(item => Array.isArray(item))) { arr = [].concat(...arr) } return arr } console.log(flat(arr)); //[1, 2, 3, 'a', 'b',4, 5, 6, 'c']
-
Arrary.reduce + Array.concat
function flat (arr) { var newArr = arr.reduce((prev, cur) => { return prev.concat(Array.isArray(cur) ? flat(cur) : cur) },[]) return newArr } console.log(flat(arr));
-
es5递归
// es5 let newArr = [] function flat (arr) { for(let i = 0; i < arr.length; i++) { let item = arr[i]; // if (Array.isArray(arr[i])){ if(Object.prototype.toString.call(item)==='[object Array]'){ flat(item) } else { newArr.push(item) } } } flat(arr) console.log(newArr);