把多维数组转换为一维数组的方法: - **方法一:toString( )** ```js //答案: function flatten(arr) { ?? ?return arr.toString().split(',').map(function(item){ ?? ??? ?return +item;//类型准换为? ?? ?}) } //解析: arr=[[1,2,3],[4,5,6],[7,8,9]] console.log(arr.toString()); //输出 1,2,3,4,5,6,7,8,9 console.log(arr.toString().split(",")); //输出 (9)?['1', '2', '3', '4', '5', '6', '7', '8', '9'] ``` - **方法二:展开运算符 arr.some**
知识点: arr.some(()=>{}) 用于逐一检查数组中是否有元素满足某个条件,有就返回 true,并且不再继续向下检查。没有就返回 false。 concat 用于连接多个数组。`arr = [1,2,3],res = arr.concat(arr,1)?
```js function flatten(arr) { ?? ?//检查 arr 中是否有元素是数组: ?? ?while(arr.some((item)=>{Array.isArray(item)})){ ?? ??? ?arr = [].concat(...arr);//逐层拨开洋葱的心,直到没有数组 ?? ?} ?? ?return arr; }
//解析: let arr = [1,2,3] console.log(...arr);// 1 ?2 ?3 let arr2 = [[1,2,3],[4,5,6],[7,8,9]]; console.log(...arr2);//[1,2,3] [4,5,6] [7,8,9] res = [].concat(...arr2)//[].concat([1,2,3],[4,5,6],[7,8,9]) console.log(res);//[1, 2, 3, 4, 5, 6, 7, 8, 9] ```
- **方法三:递归**
```js var arr = [1,2,[3,4,5,[6,7,8],9],10,[11,12]]; function fn(arr){ ?let arr1 = [] ? ? ?arr.forEach((val)=>{ ? ? ? ? ?if(val instanceof Array){ ? ? ? ? ? ? ?arr1 = arr1.concat(fn(val)) ? ? ? ? ? ? ?//[1,2].concat([3,4,5].concat(fn([6,7,8]))) ? ? ? ? ?}else{ ? ? ? ? ? ? ?arr1.push(val) ? ? ? ? ?} ? ? ? }) ? ? ? return arr1 ?} ```
- **方法四:ES6 ?的 flat 方法**
```js function flatten(arr) { ?? ?return arr.flat(Infinity); } //解析: var arr1 = [1, 2, [3, 4]]; arr1.flat(); // [1, 2, 3, 4] ? var arr2 = [1, 2, [3, 4, [5, 6]]]; arr2.flat();// [1, 2, 3, 4, [5, 6]] 默认展开一层深度 ? var arr3 = [1, 2, [3, 4, [5, 6]]]; arr3.flat(2);// [1, 2, 3, 4, 5, 6]?
arr3.flat(Infinity); //使用 Infinity 作为深度,展开任意深度的嵌套数组 ```
- **方法五:reduce** 前序知识:[reduce 方法](https://www.runoob.com/jsref/jsref-reduce.html) + 递归 ```js arr.reduce((total,curItem,curIndex,arr)=>{return ....},initialTotal) //计算每一位四舍五入的和 arr = [1.3,5.0,66.8] function fun(arr){ ? ? return arr.reduce((pre,cur)=>{ ? ? ? ? return pre + Math.round(cur) ? ? },0) } ```
reduce + 递归实现数组拍平
```js function flatten(arr) { ?? ?return arr.reduce((pre,cur)=>{ ? ? ? ?pre.concat(cur instanceof Array?flatten(cur):)? ? ? },[]) } ```
|