數組扁平化指得是將一個多維數組轉爲一維數組
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);