陣列的扁平化就是陣列裡面巢狀陣列,最後需要的是只有一維的資料
1、es6提供的新方法flat(depth)
let a = [1,[2,3]];
a.flat(); // [1,2,3]
a.flat(1); //[1,2,3]
flat(depth) 方法中的引數depth,代表展開巢狀陣列的深度,預設是1
所以我們可以新增引數1,或者直接呼叫flat()來對2維陣列進行扁平化,如果我們可以提前知道陣列的維度,對這個陣列進行扁平化處理,引數depth的值就是陣列的維度減一。
let a = [1,[2,3,[4,[5]]]];
a.flat(4-1); // [1,2,3,4,5] a是4維陣列
其實還有一種更簡單的辦法,無需知道陣列的維度,直接將目標陣列變成1維陣列。depth的值設定為infinity。
let a = [1,[2,3,[4,[5]]]];
a.flat(infinity); // [1,2,3,4,5] a是4維陣列
2、es5+遞迴
var arr1 = [1, 2, 3, [1, 2, 3, 4, [2, 3, 4]]];
function flatten(arr) else
} return res;
} flatten(arr1); //[1, 2, 3, 1, 2, 3, 4, 2, 3, 4]
3、es6+reduce方法
var arr1 = [1, 2, [3], [1, 2, 3, [4, [2, 3, 4]]]];
function flatten(arr) ,);
}
這裡使用的是陣列的reduce方法,需要注意的是reduce方法,我們傳遞了兩個引數, 第乙個引數就是就是處理扁平化的箭頭函式 第二個引數是乙個空陣列,也是作為遍歷的開始。(res)
reduce() 方法接收乙個函式作為累加器,陣列中的每個值(從左到右)開始縮減,最終計算為乙個值。
reduce() 可以作為乙個高階函式,用於函式的 compose。
注意: reduce() 對於空陣列是不會執行**函式的。
注:array.reduce(function(total, currentvalue, currentindex, arr), initialvalue)
| total | 必需。初始值, 或者計算結束後的返回值。 |
| currentvalue | 必需。當前元素 |
| currentindex | 可選。當前元素的索引 |
| arr | 可選。當前元素所屬的陣列物件。 |
陣列扁平化
原陣列 const arr 1,2,3,4 5,6,7,8 9 希望輸出 1,2,3,4,5,6,7,8,9 方法一 遞迴 function arrdelayering arr else return newarr let newarr arrdelayering arr 1,2,3,4,5,6,7...
陣列扁平化
今天看到了陣列扁平化處理,猶記得之前面試被問到過,下面介紹一下陣列扁平化處理的幾種形式 題目要求 將陣列 arr 1,2,3,4,5,6,7,8,9 轉化為 1,2,3,4,5,6,7,8,9 1 遞迴 var arr 1,2,3,4,5,6,7,8,9 方法一 遞迴 function flatfu...
扁平化陣列
第一次遇到陣列扁平化已經是在3k遊戲的筆試題裡,當時是用了遞迴的方法。因為對一些陣列方法,字串方法十分的不熟練 扁平化陣列的核心都是,遍歷陣列元素,遇到陣列就拆,不是陣列就加進去。var arr 1,2,3,4,5 console.log bianpinghua arr tostring split...