JS算法入门(3)-数组扁平化

数组扁平化指得是将一个多维数组转为一维数组

1.使用ES6提供的Array.prototype.flat处理

对于flat,MDN上有详细讲解

 1 let arr = [
 2     [1,2,2],
 3     [3,4,5,5],
 4     [6,7,8,9,[10,11,12,[12,13,[14]]]],
 5     15,16
 6 ]
 7 // flat(depth)  depth:指提取嵌套数组的结构深度,默认值为 1。为Infinity时指提取所有的嵌套数组
 8 arr = arr.flat(Infinity) 
 9 console.log(arr); 
10 /*输出: [
11     1,  2,  2,  3,  4,  5,  5,
12     6,  7,  8,  9, 10, 11, 12,
13    12, 13, 14, 15, 16
14  ] */

2.使用toString(),直接把数组转化成字符串即可

值得一提的是:数组.toString()之后,不管该数组有多少级,最后都会变为以逗号分隔的字符串(没有中括号和层级),相当于真的扁平化了

1 arr = arr.toString().split(',').map(item=>Number(item)) 

将数组转为字符串,再讲字符串split变为数组(这个时候的每一项元素都是字符串),最后将数组中的每一项都转化为number类型

3.使用JSON.stringify

arr = JSON.stringify(arr).replace(/[|]/g,'').split(',').map(item=>Number(item)) 

4.基于数组的some方法进行判断校验,验证数组中的某项有没有符合函数中提供的规则的

利用Array.from()方法:主要用来判断某个值是否是数组,如果是返回true,否则返回false

1 while(arr.some(item=>Array.from(item))){
2     arr = [].concat(...arr) //...arr 每次只能展开一级
3 }

5.递归处理

 1 ~function(){
 2     function myFlat(){
 3       let res = [],
 4           _this = this;
 5           let fn = arr => {
 6             for(let i = 0;i< arr.length; i++){
 7                 let item = arr[i];
 8                 if(Array.isArray(item)){//判断是否是数组,如果是递归调用fn()
 9                     fn(item);
10                     continue;
11                 }
12                 res.push(item)  //不是数组则将该项放入res新数组中
13             }
14           }
15            fn(_this)
16             return res
17     }
18     Array.prototype.myFlat = myFlat
19 }()
20 arr = arr.myFlat();
21 console.log(arr); 
原文地址:https://www.cnblogs.com/yjiangling/p/13938349.html