js 實現陣列扁平化

2021-10-09 08:35:13 字數 3113 閱讀 9249

什麼是陣列扁平化?

陣列扁平化就是將乙個多維陣列轉換為乙個一維陣列
首先讓我們思考乙個這樣的題目;假如有乙個陣列 var arr = [1, [2, 3, [4]]] ,我們怎麼能把arr變成[1, 2, 3, 4]呢?即讓多維陣列降維,轉換為只有一層的陣列;如果用過lodash的話,我們知道 flatten 和 flattendeep 方法都可以實現.

flatten用法:

概念:可以理解為將巢狀陣列的維數減少,flattened(平坦). 如果 isdeep 值為 true 時,巢狀陣列將遞迴為一維陣列, 否則只減少巢狀陣列乙個級別的維數.

**如下:

引數: array

(array)

: 需要flattened(減少維數)的巢狀陣列

[isdeep]

(boolean)

: 是否深遞迴

返回值:

(array)

: 返回處理後的陣列

// using `isdeep`

_.flatten([

1,[2

,3,[

4]]]

,true);

// => [1, 2, 3, 4]

flattendeep用法:

概念:遞迴地平坦乙個巢狀的陣列.相當於_.flatten(array, true)

**引數:array (array): 需要

返回值:(array): 返回處理後的陣列.

flattendeep: 遞迴地平坦乙個巢狀的陣列.相當於_.

flatten

(array,

true).

_.flattendeep([

1,[2

,3,[

4]]]

);// => [1, 2, 3, 4]

那麼如果我們自己寫該如何實現呢?下面列舉幾種實現方式:

1. 迴圈陣列+遞迴

實現思路:迴圈陣列,如果資料中還有陣列的話,遞迴呼叫flatten扁平函式(利用for迴圈扁平),用concat連線,最終返回result;

function

flatten

(arr)

else

}return result;

}flatten

(arr)

// [1,2,3,4]

var arr =[1

,[2,

3,[4

]]];

.concat.([

],arr)

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

function

flatten

(arr)

return arr;

}flatten

(arr)

// [1,2,3,4]

3. reduce方法

reduce() 方法對累加器和陣列中的每個元素(從左到右)應用乙個函式,將其減少為單個值。

能使用reduce原因如下:

var flattened = arr.

reduce

(function

(prev, cur),[

])console.

log(flattened)

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

實現思路:使用reduce, 當陣列中還有陣列的話,遞迴呼叫flatten扁平函式(利用reduce扁平), 用concat連線,最終返回arr.reduce的返回值;

function

flatten

(arr),[

])}flatten

(arr)

// [1,2,3,4]

4. es6 展開運算子

可以使用es6 展開運算子的原因如下:

var arr =[1

,[2,

3,[4

]]];

console.

log(

...arr)

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

實現思路:利用arr.some判斷當陣列中還有陣列的話,遞迴呼叫flatten扁平函式(利用es6展開運算子扁平), 用concat連線,最終返回arr;

function

flatten

(arr)

return arr;

}flatten

(arr)

// [1,2,3,4]

5. tostring方法(陣列元素為數字)

如果陣列的元素是數字,那麼我們可以考慮tostring()方法,其他情況不適用。原因如下:

[1,

[2,3

,[4]

]].tostring()

// "1,2,3,4"

實現思路:陣列適用tostring()方法後變成以逗號分割的字串,然後map遍歷陣列把每一項再變回整數並返回map後的結果。

function

flatten

(arr))}

flatten

(arr)

// [1,2,3,4]

6. yield*的用法,天才級別的扁平化方式
function

*itertree

(tree)

}else

}let arr1 =[1

,2,[

'a',

'b',

['中'

,'文',[

1,2,

3,[11

,21,31

]]]]

,3];

let list=

for(

const x of

itertree

(arr1)

) console.

log(list)

;//[1, 2, "a", "b", "中", "文", 1, 2, 3, 11, 21, 31, 3]

js 陣列扁平化

陣列扁平化是指將乙個多維陣列變為一維陣列 遍歷陣列arr,若arr i 為陣列則遞迴遍歷,直至arr i 不為陣列然後與之前的結果concat 遍歷陣列每一項,若值為陣列則遞迴遍歷,否則concat。function flatten arr 1,2,3,4,5 1,2,3,4,5 2.1.reduc...

js陣列扁平化

所謂陣列扁平化,就是將乙個二維或多維陣列轉換為一維陣列。比如將 1,2 3,4,5 轉化為 1,2,3,4,5 1 首先想到設定乙個空陣列,如果原陣列中的每一項不是陣列,直接push進去,如果是陣列,就與這個空陣列進行連線 實現 let flatarr arr else return result ...

JS 陣列扁平化

假如有乙個陣列 var arr 1,2,3,4 我們怎麼能把arr變成 1,2,3,4 呢?即讓多維陣列降維,轉換為只有一層的陣列。1.迴圈陣列 遞迴 function flatten arr else return result flatten arr 1,2,3,4 var arr 1 2,3,...