
前言
日常把掘金当作学习写笔记的平台哈,已经好久不学习了,真是罪恶 目的是成为一名资深前端程序媛,无奈现在还只是一名切图仔,还需努力啊啊啊啊
嗯~~ 现在在刷一些面试题,因为有点盲目,不知道学什么,干脆从面试题下手,简单粗暴,哈哈哈,看到好多面试题都出现了怎么拍平数组(多维数组转换一维数组)这个问题,因此,搜索各个论坛加上自己的想法总结了以下几种
//先初始一个数组,数组里面嵌套了数组,现在就是要把这个数组变成一维数组(拍平)
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))
目前就这四种方法,等我挤破脑袋再思考思考其他方式哈