欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript 數(shù)組展平方法: flat() 和 flatMap()詳解

 更新時(shí)間:2023年06月16日 15:49:32   作者:流星Studio  
從 ES2019 中開始引入了一種扁平化數(shù)組的新方法,可以展平任何深度的數(shù)組,這篇文章主要介紹了JavaScript 數(shù)組展平方法: flat() 和 flatMap()詳解,需要的朋友可以參考下

從 ES2019 中開始引入了一種扁平化數(shù)組的新方法,可以展平任何深度的數(shù)組。

flat

flat() 方法創(chuàng)建一個(gè)新數(shù)組,其中所有子數(shù)組元素以遞歸方式連接到特定深度。

語法:array.flat(depth)

  • array : flat() 方法將在給定的數(shù)組中使用。
  • depth:可選參數(shù),指定展平的深度,默認(rèn)情況下,深度為 1。

此方法會按照一個(gè)可指定的深度遞歸遍歷數(shù)組,并將所有元素與遍歷到的子數(shù)組中的元素合并為一個(gè)新數(shù)組返回。

const arr = [[1, 2], [3, 4], 5];
console.log(arr.flat()); // [ 1, 2, 3, 4, 5 ]

flat() 方法也會移除數(shù)組中的空項(xiàng):

const arr = [[1, 2], , [3, 4], 5];
console.log(arr.flat()); // [ 1, 2, 3, 4, 5 ]

在一些復(fù)雜的場合,數(shù)組的層級不單一比較復(fù)雜的情況下,不必去逐個(gè)計(jì)算數(shù)組的嵌套深度,可以借助參數(shù) Infinity ,就可以將所有層級的數(shù)組展平。

const arrVeryDeep = [[1, [2, 2, [3, [4, [5, [6]]]]], 1]];
console.log(arrVeryDeep.flat(Infinity)); // [ 1, 2, 2, 3, 4, 5, 6, 1 ]

flatMap

flatMap() 方法首先使用映射函數(shù)映射每個(gè)元素,然后將結(jié)果壓縮成一個(gè)新數(shù)組。它與 map 連著深度值為 1 的 flat() 幾乎相同,但 flatMap() 通常在合并成一種方法的效率稍微高一些。

語法

// Arrow function
flatMap((currentValue) => { ... } )
flatMap((currentValue, index) => { ... } )
flatMap((currentValue, index, array) => { ... } )
// Callback function
flatMap(callbackFn)
flatMap(callbackFn, thisArg)
// Inline callback function
flatMap(function(currentValue) { ... })
flatMap(function(currentValue, index) { ... })
flatMap(function(currentValue, index, array){ ... })
flatMap(function(currentValue, index, array) { ... }, thisArg)
  • callbackFn:處理新數(shù)組元素的回調(diào)函數(shù),接收三個(gè)參數(shù)
    • currentValue:數(shù)組中正在處理的當(dāng)前元素。
    • index:可選參數(shù),數(shù)組中正在處理的當(dāng)前元素的索引。
    • array:可選參數(shù),調(diào)用了數(shù)組 map()
  • thisArg:執(zhí)行 callbackFn 時(shí)用作 this 的值

此方法返回一個(gè)新數(shù)組的值,其中每個(gè)元素都是通過回調(diào)函數(shù)的處理過的結(jié)果,并將其展平到深度為 1

const userRunning1 = {
    movements: [1000, 4500, 500, 1200],
};
const userRunning2 = {
    movements: [2000, 4500, 2500, 12000],
};
const userRunning3 = {
    movements: [10000, 5000, 1500, 800],
};
const allRunning = [userRunning1, userRunning2, userRunning3];
// flat
const overalDistance = allRunning
    .map((acc) => acc.movements)
    .flat()
    .reduce((acc, mov) => acc + mov, 0);
console.log(overalDistance); // 45500
// flatMap
const overalDistance2 = allRunning
    .flatMap((acc) => acc.movements)
    .reduce((acc, mov) => acc + mov, 0);
console.log(overalDistance2); // 45500

上述代碼通過 flat() 方法和 flatMap() 方法來解決同樣問題,將所有用戶的跑步記錄進(jìn)行累加。

flatMap() 展平的深度值為 1 ,而flat() 可以指定多級。

到此這篇關(guān)于JavaScript 數(shù)組展平方法: flat() 和 flatMap()詳解的文章就介紹到這了,更多相關(guān)js數(shù)組展平內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論