数组扁平化
就是把多维数组转成一维数组
Array.flat(deep)
ES6提供的数组去扁平化api
const arr = [1, 2, [1, 2],[3, 4, 5, [3, 4, [5, 3, [5]]]], 4, [2, 4], 78]
arr.flat(Infinity)
reduce实现
利用reduce作为累加器
function flatten(arr){
return arr.reduce((pre,cur)=>{
return pre.concat(Array.isArray(cur)?flatten(cur):cur)
},[])
}
...运算符
通过some实现循环调用
function flatten(arr) {
while (arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr)
}
return arr
}
递归实现
function flatten(arr) {
let newarr = []
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
newarr = newarr.concat(flatten(arr[i]))
} else {
newarr.push(arr[i])
}
}
return newarr
}
toString和split实现 (不推荐)
function flatten(arr){
return arr.toString().split(',').map(item=>Number(item))
}
正则实现 (不推荐)
function flatten(arr){
return JSON.parse(`[${JSON.stringify(arr).replace(/(\[|\])/g,'')}]`)
}