一个很简单的需求,开发过程中遇到的
例:
let arr = [1, [2, 3, [4, 5], 6, [7, [8, [9, [10]]]]]]; //多维数组
let arr2 = [[1,2,3],[4,5,6],[7,8],9] //二维数组
// 需要得到的结果
// arr = [1,2,3,4,5,6,7,8,9,10];
// arr2 = [1,2,3,4,5,6,7,8,9];
实现方式其实有很多种,我只挑了一种学习,有兴趣的可以 点击这里
/**
* 函数方式(递归)
* @param arr 数组
* @returns {*} 一维数组,全新的对象
*/
function fn(arr){
return arr.reduce((prev,cur)=>{
return prev.concat(Array.isArray(cur)?fn(cur):cur)
},[])
}
// 给 Array 新增一个属性用于扁平化多维数组(递归)
Array.prototype.pia = function () {
return this.reduce((prev, cur) => prev.concat(Array.isArray(cur) ? cur.pia() : cur),[]);
};
let arr = [1, [2, 3, [4, 5], 6, [7, [8, [9, [10]]]]]];
console.log("多维数组 函数调用fn(arr) --- " + fn(arr)); //使用函数方式扁平化多维数组
console.log("多维数组 属性调用arr.pia() --- " + arr.pia()); //使用属性扁平化多维数组
//如果只是像单纯的扁平化 二维数组 可以直接扁平就好了
let arr2 = [[1,2,3],[4,5,6],[7,8],9]
arr2 = arr2.reduce((prev, cur) => prev.concat(cur), []); //仅扁平化二维数组就不用递归了
console.log("二维数组 --- "+arr2);
网友评论