多維陣列 「 拉平 「 實現一維陣列

2021-10-12 20:14:24 字數 2450 閱讀 7482

背景:前兩天專案中遇到個問題,通過雙層map迴圈+await請求資料最終得到了乙個二維陣列,但是實際我想要的是二維陣列裡的那些物件,需要構建成乙個一維陣列(因為我要通過v-for去迴圈顯示)

資料:

[[,

,],[

,,],

];

當然了,二維陣列轉一維陣列的方法其實有很多,但是當多維(三維、四維等)呢?難不成迴圈+遞迴嗎?

所以我就在想:有沒有乙個更優雅、更方便的api可以實現這個需求呢?

答案當然是:有的。

先來看實現,後講解:

如上,通過flat的方法去「拉平」了陣列,實現了二維轉一維的方法。

那麼多維轉一維怎麼實現呢?別著急,該方法還提供乙個引數:

陣列例項的 flat():陣列的成員有時還是陣列,array.prototype.flat()用於將巢狀的陣列「拉平」,變成一維的陣列。該方法返回乙個新陣列,對原資料沒有影響

[1,

2,[3

,4]]

.flat()

// [1, 2, 3, 4]

上面**中,原陣列的成員裡面有乙個陣列,flat()方法將子陣列的成員取出來,新增在原來的位置。

flat()預設只會「拉平」一層,如果想要「拉平」多層的巢狀陣列,可以將flat()方法的引數寫成乙個整數,表示想要拉平的層數,預設為1。

[1,

2,[3

,[4,

5]]]

.flat()

// [1, 2, 3, [4, 5]][1

,2,[

3,[4

,5]]

].flat(2

)// [1, 2, 3, 4, 5]

上面**中,flat()的引數為2,表示要「拉平」兩層的巢狀陣列。

如果不管有多少層巢狀,都要轉成一維陣列,可以用infinity關鍵字作為引數。

[1,

[2,[

3]]]

.flat

(infinity

)// [1, 2, 3]

如果原陣列有空位,flat()方法會跳過空位。

[1,

2,,4

,5].

flat()

// [1, 2, 4, 5]

flatmap()方法對原陣列的每個成員執行乙個函式(相當於執行array.prototype.map()),然後對返回值組成的陣列執行flat()方法。該方法返回乙個新陣列,不改變原陣列。(相當於先把陣列進行map處理,然後對map的返回值陣列進行flat處理)

// 相當於 [[2, 4], [3, 6], [4, 8]].flat()[2

,3,4

].flatmap

((x)

=>

[x, x *2]

)// [2, 4, 3, 6, 4, 8]

flatmap()只能展開一層陣列。

// 相當於 [[[2]], [[4]], [[6]], [[8]]].flat()[1

,2,3

,4].

flatmap

(x =>

[[x *2]

])// [[2], [4], [6], [8]]

上面**中,遍歷函式返回的是乙個雙層的陣列,但是預設只能展開一層,因此flatmap()返回的還是乙個巢狀陣列。

flatmap()方法的引數是乙個遍歷函式,該函式可以接受三個引數,分別是當前陣列成員、當前陣列成員的位置(從零開始)、原陣列。

arr.

flatmap

(function

callback

(currentvalue[

, index[

, array]])

[, thisarg]

)

flatmap()方法還可以有第二個引數,用來繫結遍歷函式裡面的this。

以上兩個新方法是es6中陣列新增的擴充套件,強烈推薦大家閱讀阮一峰大神的es6這本書。

好了,以上就是多維陣列扁平化實現一維陣列的方法,希望對你有所幫助。

如有問題,請指出,接受批評。

flat 多維陣列 拉平 ,變成一維陣列

array.flat 用於將巢狀的陣列 拉平 變成一維的陣列。該方法返回乙個新陣列,對原資料沒有影響。var arr flat 預設只會 拉平 一層,拉平多層可以將flat 方法的引數寫成乙個整數,表示想要拉平的層數。arr.flat 拉平一層 如果不管有多少層巢狀,都要轉成一維陣列,可以用infi...

多維陣列變一維陣列

判斷是否是陣列 let isarr arr arr instanceof array 判斷是否一維陣列 let istdim arr arr.reduce o1,o2 o1 isarr o2 true 多維陣列變一維陣列function name return a console.log name ...

一維陣列變多維陣列

1.雙層filter過濾 第一層 item 定義為father newarr接收 第一層過濾出最頂層陣列 判斷 brancharr的長度 存在father.children brancharr 否則為空 return father.pid 0 第二層 item 定義為child brancharr接...