什麼是陣列扁平化?
陣列扁平化就是將乙個多維陣列轉換為乙個一維陣列
首先讓我們思考乙個這樣的題目;假如有乙個陣列 var arr = [1, [2, 3, [4]]] ,我們怎麼能把arr變成[1, 2, 3, 4]呢?即讓多維陣列降維,轉換為只有一層的陣列;如果用過lodash的話,我們知道 flatten 和 flattendeep 方法都可以實現.
flatten用法:
概念:可以理解為將巢狀陣列的維數減少,flattened(平坦). 如果 isdeep 值為 true 時,巢狀陣列將遞迴為一維陣列, 否則只減少巢狀陣列乙個級別的維數.
**如下:
flattendeep用法:引數: array
(array)
: 需要flattened(減少維數)的巢狀陣列
[isdeep]
(boolean)
: 是否深遞迴
返回值:
(array)
: 返回處理後的陣列
// using `isdeep`
_.flatten([
1,[2
,3,[
4]]]
,true);
// => [1, 2, 3, 4]
概念:遞迴地平坦乙個巢狀的陣列.相當於_.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]]
3. reduce方法function
flatten
(arr)
return arr;
}flatten
(arr)
// [1,2,3,4]
reduce() 方法對累加器和陣列中的每個元素(從左到右)應用乙個函式,將其減少為單個值。
能使用reduce原因如下:
實現思路:使用reduce, 當陣列中還有陣列的話,遞迴呼叫flatten扁平函式(利用reduce扁平), 用concat連線,最終返回arr.reduce的返回值;var flattened = arr.
reduce
(function
(prev, cur),[
])console.
log(flattened)
;// [1,2,3,[4]]
4. es6 展開運算子function
flatten
(arr),[
])}flatten
(arr)
// [1,2,3,4]
可以使用es6 展開運算子的原因如下:
實現思路:利用arr.some判斷當陣列中還有陣列的話,遞迴呼叫flatten扁平函式(利用es6展開運算子扁平), 用concat連線,最終返回arr;var arr =[1
,[2,
3,[4
]]];
console.
log(
...arr)
;// 1,[2,3,[4]]
5. tostring方法(陣列元素為數字)function
flatten
(arr)
return arr;
}flatten
(arr)
// [1,2,3,4]
如果陣列的元素是數字,那麼我們可以考慮tostring()方法,其他情況不適用。原因如下:
實現思路:陣列適用tostring()方法後變成以逗號分割的字串,然後map遍歷陣列把每一項再變回整數並返回map後的結果。[1,
[2,3
,[4]
]].tostring()
// "1,2,3,4"
6. yield*的用法,天才級別的扁平化方式function
flatten
(arr))}
flatten
(arr)
// [1,2,3,4]
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,...