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); 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章