拍平数组(数组扁平化)的方式

4,058 阅读2分钟

js

前言

日常把掘金当作学习写笔记的平台哈,已经好久不学习了,真是罪恶 目的是成为一名资深前端程序媛,无奈现在还只是一名切图仔,还需努力啊啊啊啊

嗯~~ 现在在刷一些面试题,因为有点盲目,不知道学什么,干脆从面试题下手,简单粗暴,哈哈哈,看到好多面试题都出现了怎么拍平数组(多维数组转换一维数组)这个问题,因此,搜索各个论坛加上自己的想法总结了以下几种

//先初始一个数组,数组里面嵌套了数组,现在就是要把这个数组变成一维数组(拍平)
 var arr = [[30,31],1,2,[3,4,5,[6,7,8],9],10,[11,12]];

法一: 当然是从司空见惯的遍历开始咯

//声明一个空数组,然后遍历数组中每一项,如果当前项是数组,则继续递归调用iterator方法,否则放入新数组中
function iterator(arr){
      let newarr = []
      arr.forEach(el => {
        if(el instanceof Array){
          newarr=newarr.concat(iterator(el))
        }else{
          newarr.push(el)
        }
      });
      return newarr
    }
    console.log(iterator(arr))

法二:数组的flat()方法 ,简单直接有效

//flat()方法接受一个参数,表示要拍平的数组层数
//默认拍平一层
//用Infinity关键字作为参数,表示无论嵌套多少层都转为一维数组
    arr.flat(Infinity)

法三:数组的reduce()方法(原理和法一类似)

//reduce()方法会对数组进行从左到右遍历
//参数prev 表示上一次遍历的结果,cur表示遍历的当前项
 function Reduce(ar){
    return  ar.reduce((prev,cur)=>{
     return prev.concat(Array.isArray(cur)? Reduce(cur) : cur) 
        },[])
      }
      console.log(Reduce(arr))

法四:toString()方法,很简单,但是不容易想到哦

function ToString(arrays){
  return arrays.toString().split(',').map(item=>{
      return parseInt(item)
   })
}
console.log(ToString(arr3))

目前就这四种方法,等我挤破脑袋再思考思考其他方式哈