大家好,我是怀恋,很高兴和大家分享这一遍文章。写这篇文章的目的是用来记录自己前端的学习情况,也为自己马上面临的秋招做好准备。文笔不好,多多包涵。
什么是数组扁平化?
数组扁平化就是将多维数组转化为一维数组。例如:[1,[2,3],[4,5,[6]]]==>[1,2,3,4,5,6]。
1.利用ES6为数组的提供的flat()
flat()方法接收一个参数,返回一个新的数组,不会影响原数组。
该方法默认只展平“一层”,当传递的参数为Infinity时,可将多维数组转为一维数组。
let arr=[1,[2,3],["a",["b"]],"c"];
function arrFlat(arr){
return arr.flat(Infinity);
}
console.log(arrFlat(arr)); // [1,2,3,"a","b","c"]
2.利用reduce()
reduce() 将初始元素和当前元素的结果返回作为初始元素的这一特性。
let arr=[1,[2,3],["a",["b"]],"c"];
function arrFlat(arr){
return arr.reduce(function(result,item,currentIndex,arr){
return result.concat(Array.isArray(item)?arrFlat(item):item);
},[])
}
console.log(arrFlat(arr)); // [1,2,3,"a","b","c"]
3.利用递归循环遍历
let arr=[1,[2,3],["a",["b"]],"c",false];
function arrFlat(arr){
let result=[];
for(const item of arr){
if(Array.isArray(item)){
result=result.concat(arrFlat(item));
}else{
result.push(item);
}
}
return result;
}
console.log(arrFlat(arr)); // [1,2,3,"a","b","c",false]
4.利用展开运算符...
let arr=[1,[2,3],["a",["b"]],"c",false];
function arrFlat(arr){
while(arr.some(Array.isArray)){
arr=[].concat(...arr);
}
return arr;
}
console.log(arrFlat(arr)); // [1,2,3,"a","b","c",false]
这就是我能够知道的一些方法了,如果有错误或者其它更加高效的方法请在评论留言。谢谢阅读。