数组扁平化就是把多维数组转为一维数组
比如
[1, [2,3,3],3,[1, [2,3,8]],8] 转为[1,2,3,3,3,1,2,3,8,8]
1.[].concat(…arr)
var msg = [1, [2,3,3],3,[1, [2,3,8]],8]
function flatten(arr) {
while(arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr)
}
return arr
}
console.log(flatten(msg))
2.reduce
var arr = [1, [2,3,3],3,[1, [2,3,8]],8]
function flatten(arr1) {
return arr1.reduce((pre,cur,index)=> {
return pre.concat(Array.isArray(cur)? flatten(cur): cur)
},[])
}
console.log(flatten(arr))
//判断是不是数组,如果是数组,就递归,不是就直接取当前的值
3. toString & split & .map[Number]
var arr = [1, [2,3,3],3,[1, [2,3,8]],8]
function flatten(arr1) {
return arr1.toString().split(",").map(Number)
}
console.log(flatten(arr))
//转为字符串 再切割成数组
//.map[Number] 是把["1", "2"]转为[1, 2]
//.map[String] 是把[1, 2]转为["1", "2"]
4.join & split & map[Number]
var arr = [1, [2,3,3],3,[1, [2,3,8]],8]
function flatten(arr1) {
console.log(arr1.join().split(",").map(Number))
// return arr1.toString().split(",").map(Number)
}
console.log(flatten(arr))
//.map[Number] 是把["1", "2"]转为[1, 2]
//.map[String] 是把[1, 2]转为["1", "2"]
5.map & 递归
var arr = [1, [2,3,3],3,[1, [2,3,8]],8]
function flatten(arr1) {
var result = []
arr1.map(item => {
Array.isArray(item) ? result = result.concat(flatten(item)) : result.push(item)
})
return result
}
console.log(flatten(arr))
6.toString().split(’,’),然后map,然后Number(item)
//
var s1 = [1, [2,3,3],3,[1, [2,3,8]],8]
function flatten(arr) {
return arr.toString().split(',').map(item => Number(item))
}
console.log(flatten(s1))
7.ES6中的flat(Infinity) 拉平多维数组
//
const arr = [1, 2, 3, [4, 5, 6,[7]]]
console.log(arr.flat(Infinity)) //[1, 2, 3, 4, 5, 6, 7]
//ES6中的flat() 拉平多维数组,Infinity是关键字,不管多少层 都可以拉平
//flat(n)里面如果是数字的话,就拉平n层
总结
就是判断子元素是不是数组,如果是数组,就再次递归,如果不是,就直接Push就可以啦
参考这位大佬的,代码我自己写的
https://www.cnblogs.com/wind-lanyan/p/9044130.html