数组扁平化的三种必备方法
数组扁平化,也叫数组展开,将多维数组转化为一维数组
基本思路:逐个判断子项是否为数组
方法一:使用数组与字符串的转化
Array.prototype.myFlat = function(arr){
//数组转化称字符串
return this.join(',').split(',').map(item => {
//使用map方法将字符串拼接成数组
//return item ['1', '3', '5', '1', '2', '5', '7', '5', '8', '9']
return parseInt(item) //使用parseInt将每次遍历到的字符串数值转化为数值
})
}
let arr = [[1,3,5],[1,[2,[5,7,[5,8,9]]]]]
arr.myFlat() //[1, 3, 5, 1, 2, 5, 7, 5, 8, 9]
方法二 : 使用递归
Array.prototype.myFlat = function(){
//1、借助map方法
const res = this.map(item =>{
if(Array.isArray(item)){
//2、进行递归
return item.myFlat();
}
return [item];
})
//3、拼接子项
return [].concat(...res);
}
let arr = [[1,3,5],[1,[2,[5,7,[5,8,9]]]]]
arr.myFlat() //[1, 3, 5, 1, 2, 5, 7, 5, 8, 9]
方法三:使用while与some
Array.prototype.myFlat = function(){
let res = this;
//1、使用while循环
//2、使用some方法
while(res.some(item => Array.isArray(item))){
//3、拼接子项
res = [].concat(...res)
}
return res;
}
let arr = [[1,3,5],[1,[2,[5,7,[5,8,9]]]]];
arr.myFlat() // [1, 3, 5, 1, 2, 5, 7, 5, 8, 9]