数组扁平化

129 阅读1分钟

数组扁平化

就是把多维数组转成一维数组

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,'')}]`)
 }