精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

JavaScript 數組方法 reduce 的妙用之處

開發 前端
reduce() 方法對數組中的每個元素按序執行一個 reducer 函數,每一次運行 reducer 會將先前元素的計算結果作為參數傳入,最后將其結果匯總為單個返回值。

大家好,我是 CUGGZ。

在 JavaScript 中,reduce 是最難理解的數組方法之一,它是一個強大而靈活的高階函數,下面就來看看 reduce 的妙用之處!

1. 基本用法

reduce() 是 JavaScript 中一個很有用的數組方法,MDN 對其解釋如下:

reduce() 方法對數組中的每個元素按序執行一個 reducer 函數,每一次運行 reducer 會將先前元素的計算結果作為參數傳入,最后將其結果匯總為單個返回值。

reduce() 方法的語法如下:

array.reduce(reducer, initialValue)

其中有兩個參數:(1)reducer 函數,包含四個參數:

  • previousValue:上一次調用 callbackFn 時的返回值。在第一次調用時,若指定了初始值 initialValue,其值則為 initialValue,否則為數組索引為 0 的元素 array[0]。
  • currentValue:數組中正在處理的元素。在第一次調用時,若指定了初始值 initialValue,其值則為數組索引為 0 的元素 array[0],否則為 array[1]。
  • currentIndex:數組中正在處理的元素的索引。若指定了初始值 initialValue,則起始索引號為 0,否則從索引 1 起始。
  • array:用于遍歷的數組。

(2)initialValue 可選 作為第一次調用 callback 函數時參數 previousValue 的值。若指定了初始值 initialValue,則 currentValue 則將使用數組第一個元素;否則 previousValue 將使用數組第一個元素,而 currentValue 將使用數組第二個元素。

下面是一個使用reduce() 求數組元素之和的例子:

const arr = [0, 1, 2, 3, 4];

const calculateSum = (previousValue, currentValue) => {
console.log('previousValue: ', previousValue);
console.log('currentValue:', currentValue);
return previousValue + currentValue;
};

arr.reduce(calculateSum)

reducer 會逐個遍歷數組元素,每一步都將當前元素的值與上一步的計算結果相加(上一步的計算結果是當前元素之前所有元素的總和),直到沒有更多的元素被相加。

這段代碼的輸出如下:

圖片

其執行過程如下:

圖片

當我們給reduce()方法一個初始值12時:

arr.reduce(calculateSum, 12);

其執行過程如下:

圖片

如果數組為空且未提供初始值,reduce() 方法就會拋出 TypeError:

const reducer = (accumulator, currentValue) => accumulator + currentValue;

const result = [].reduce(reducer)

console.log(result)

輸出結果如下:

圖片

2. 使用技巧

(1)數組求和

reduce()方法最直接的用法就是對數組元素求和:

const total = [34, 12, 143, 13, 76].reduce(
(previousValue, currentValue) => previousValue + currentValue,
0
);
console.log(total);

其輸出結果如下:

278

(2)扁平數組

reduce()方法還可以用來扁平化數組:

const array = [[0, 1], [2, 3], [4, 5], [5, 6]];

const flattenedArray = array.reduce(
(previousValue, currentValue) => previousValue.concat(currentValue),
[]
);
console.log(flattenedArray);

輸出結果如下:

[0, 1, 2, 3, 4, 5, 5, 6]

如果數組有不止一層嵌套數組,可以遞歸調用 reduce 函數來扁平化,然后將它們與最終的數組連接起來即可。

const nestedArray = [[1, [2, 3]], [4, 5], [[6, 7], [8, 9]]];

function flattenArray(nestedArray) {
return nestedArray.reduce(
(accumulator, currentValue) =>
accumulator.concat(
Array.isArray(currentValue) ? flattenArray(currentValue) : currentValue
),
[]);
}

const flattenedArray = flattenArray(nestedArray);
console.log(flattenedArray)

輸出結果如下:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

(3)數組分組

假設有一個國家對象數組,根據國家所在洲對數組中的每個國家進行分組。可以使用 reduce 方法來完成:

cosnt countries = [
{name: "Germany", continent: "Europe"},
{name: "Brazil", continent: "South America"},
{name: "India", continent: "Asia"},
{name: "France", continent: "Europe"},
{name: "South Korea", continent: "Asia"},
]

const groupedCountries = countries.reduce(
(groupedCountries, country) => {
if (!groupedCountries[country.continent]){
groupedCountries[country.continent] = []
}
groupedCountries[country.continent].push(country)
return groupedCountries
},
{}
);
console.log(groupedCountries)

輸出結果如下:

圖片

(4)使用 reduce() 代替 filter().map()

在 Javascript 中,數組的 filter 方法可以通過回調過濾數組中的元素,map 方法可以通過回調內部傳遞的邏輯使用舊數組創建一個新數組。有時我們必須同時使用這兩種方法,對某些條件過濾的結果創建一個新數組。

可以使用 reduce 方法來完成相同的工作,這樣就只需要遍歷數組一次。例如,要創建一個大于 30 的數字的平方根數組,使用 filter().map() 可能會這么寫:

const numbers = [3, 21, 34, 121, 553, 12, 53, 5, 42, 11];

const newArray = numbers.filter(number number > 30).map(number Math.sqrt(number));

使用 reduce 實現:

const numbers = [3, 21, 34, 121, 553, 12, 53, 5, 42, 11];

const newArray = numbers.reduce((previousValue, currentValue) => {
if (currentValue > 30) {
previousValue.push(Math.sqrt(currentValue))
}
return previousValue
}, []);

console.log(newArray);

輸出結果如下:

[5.830951894845301, 11, 23.515952032609693, 7.280109889280518, 6.48074069840786]

(5)統計數組元素出現次數

可以使用reduce來統計數組中每個元素出現的次數:

const colors = ['green', 'red', 'red', 'yellow', 'red', 'yellow', 'green', 'green'];

const colorMap = colors.reduce((previousValue, currentValue) => {
previousValue[currentValue] >= 1 ? previousValue[currentValue]++ : previousValue[currentValue] = 1;
return previousValue;
},
{}
);

console.log(colorMap);

輸出結果如下:

{green: 3, red: 3, yellow: 2}

(6)串行執行異步函數

有一組需要串行執行的異步函數,可以使用reduce()來調用執行:

const functions = [
async function() { return 1; },
async function() { return 2; },
async function() { return 3; }
];

const res = await functions.reduce((promise, fn) => promise.then(fn), Promise.resolve());

console.log(res); // 輸出結果:3

這里的 res 就相當于執行了:

Promise.resolve().then(fn1).then(fn2).then(fn3);

(7)創建管道

假設有一組簡單的數學函數,這些函數允許我們增加、減少、加倍和減半:

function increment(input) { return input + 1;}

function decrement(input) { return input — 1; }

function double(input) { return input * 2; }

function halve(input) { return input / 2; }

如果想對一個值進行多次上述操作,就可以使用reduce()。管道是用于將某些初始值轉換為最終值的函數列表的術語。我們只需將執行過程中每一步用到函數寫在管道數組中即可。

const pipeline = [increment, double, decrement];

const result = pipeline.reduce((total, func) => {
return func(total);
}, 5);

console.log(result) // 輸出結果:11

(8)反轉字符串

可以使用reduce()實現字符串的反轉:

const str = 'hello world';

[...str].reduce((a,v) => v + a); // 輸出結果:'dlrow olleh'

(9)數組去重

有一個包含重復項的數組,可以使用 reduce() 來對數組進行去重:

const arr = ["??", "??", "??", "??"];


const dedupe = (acc, currentValue) => {
if (!acc.includes(currentValue)) {
acc.push(currentValue);
}
return acc;
};

const dedupedArr = arr.reduce(dedupe, []);

console.log(dedupedArr); // ["??", "??"];

其執行過程如下:

圖片

當 reduce 方法遍歷數組時,回調函數將應用于數組中的每一項。它會檢查累加器中是否缺少當前值,如果是,則將當前值 push 到累加器中。

注:此示例僅用于說明 reduce 方法的工作原理,在實踐中,通常會選擇使用 Set 對數組進行去重,這是一種性能更高的方法:

dedupedArr = [...new Set(array)];


責任編輯:武曉燕 來源: 前端充電寶
相關推薦

2022-07-06 10:04:45

JavaScript數組前端

2022-11-13 15:33:30

JavaScript數組開發

2019-07-25 10:08:05

JavaScript數組轉換

2021-08-24 09:39:23

ReduceJS數組

2023-07-04 15:52:49

JavaScript數組

2020-03-19 15:30:08

JavaScript數組字符串

2021-09-29 06:03:37

JavaScriptreduce() 前端

2013-04-16 14:42:38

云計算智能手機移動通信網絡

2022-11-23 16:12:57

JavaScript數據類型數組

2022-05-06 12:03:16

數組Javascript

2022-04-28 08:41:53

JavaScript數組

2023-11-14 16:57:10

2024-03-21 14:27:13

JavaScript數組

2022-08-10 12:02:52

面試JavaScript

2025-09-16 00:00:00

JavaScript數組lint 規則

2025-02-19 12:00:00

JavaScript代碼數組方法

2024-08-23 15:34:23

JavaScrip數組

2022-09-27 14:36:57

JavaScrip數組開發

2019-08-13 16:23:19

JavaScript數組方法

2025-02-17 11:10:49

點贊
收藏

51CTO技術棧公眾號

一级全黄少妇性色生活片| 九九热免费在线观看| 精品视频一二三| 蜜臀va亚洲va欧美va天堂| 久久亚洲电影天堂| 在线免费观看a级片| 欧美日韩在线精品一区二区三区激情综合 | 欧美丰满少妇xxxxx做受| yy1111111| 精品九九久久| 午夜免费久久看| 亚洲一区二区在| 人妻一区二区三区四区| 美女精品一区二区| 国产91精品青草社区| 亚洲精品久久久久久国| 国产videos久久| 欧美r级电影在线观看| www.色偷偷.com| av伦理在线| 亚洲欧美视频在线观看| 欧美在线播放一区二区| 国产91免费看| 国产主播一区二区三区| 人九九综合九九宗合| 亚洲福利在线播放| 性chinese极品按摩| 极品美鲍一区| 亚洲一区自拍偷拍| 在线免费观看成人| 黄色片在线播放| 99久久婷婷国产综合精品| 亚洲va欧美va国产综合久久| 最新中文字幕第一页| 亚洲免费综合| 97久久超碰福利国产精品…| 欧美日韩精品在线观看视频 | 亚洲午夜国产成人av电影男同| 又大又长粗又爽又黄少妇视频| 日本一区二区三区中文字幕| 色天使色偷偷av一区二区| 缅甸午夜性猛交xxxx| 人人超在线公开视频| 综合久久久久久| 亚洲日本无吗高清不卡| a√资源在线| 中文字幕欧美激情一区| 日韩欧美99| 草碰在线视频| 国产欧美日韩另类视频免费观看| 欧美精品一区三区在线观看| 午夜视频在线免费播放| 91免费看`日韩一区二区| 国产欧美日本在线| 日本国产在线观看| 成人高清伦理免费影院在线观看| 成人av中文| 国产18精品乱码免费看| av不卡在线播放| 久久久久久久久久久久久久一区| 爽爽视频在线观看| 成人免费视频一区| 国语精品中文字幕| 手机福利在线| 欧美经典一区二区| 亚洲国产精品一区二区第一页| av电影在线观看| 中国色在线观看另类| 亚洲一区二区免费视频软件合集| 天堂中文а√在线| 亚洲男人天堂一区| 可以看毛片的网址| 午夜日韩成人影院| 欧美日韩成人在线| 伊人久久久久久久久| 国产精品网在线观看| 亚洲精品美女网站| jizz中文字幕| 亚洲男女av一区二区| 久久久久久久久91| 婷婷激情五月网| 日韩成人精品在线观看| 91久久精品在线| 天堂中文在线看| 久久久91精品国产一区二区精品 | 欧美精品一级| 欧美成人合集magnet| 91蜜桃视频在线观看| 日韩激情在线观看| 亚洲中国色老太| 视频一区二区三区国产| 国产精品久久久久影院老司| 日本大片免费看| 国产精品久久久久av电视剧| 91精品国产综合久久蜜臀 | 国产精品无码久久久久成人app| 国产精品一区二区黑丝| 久久久久成人精品免费播放动漫| 在线毛片网站| 欧美日韩一区二区免费视频| 999在线免费视频| 999精品视频在这里| 亚洲网在线观看| 精品视频久久久久| 蜜桃一区二区三区四区| 国产三区精品| 国产在线1区| 色综合欧美在线视频区| 久久久久国产免费| 久久看人人摘| 青草成人免费视频| 成人免费视频国产| 18成人在线视频| 欧美成人免费高清视频| 51亚洲精品| 久久精品国产亚洲7777| 无码一区二区三区| 不卡一区中文字幕| 伊人网在线免费| 粉嫩91精品久久久久久久99蜜桃| 亚洲国产精品网站| 少妇久久久久久被弄高潮| 日韩不卡一区二区| 欧美理论一区二区| www在线观看黄色| 欧美一级视频精品观看| 国产传媒在线看| 久久精品91| 蜜桃网站成人| 天堂√中文最新版在线| 精品欧美黑人一区二区三区| 99自拍视频在线| 精品一区二区三区免费毛片爱| 欧美日韩国产精品一区二区| 黑森林国产精品av| 精品国产髙清在线看国产毛片| 91视频青青草| 韩日精品视频一区| 亚洲精品成人久久久998| 欧美特大特白屁股xxxx| 亚洲毛片一区二区| 国产91精品一区| 久久婷婷综合激情| 国产视频九色蝌蚪| 日韩高清三区| 欧美在线中文字幕| 黄色片在线看| 欧美视频一区二区在线观看| 免费黄在线观看| 欧美aⅴ一区二区三区视频| 日韩尤物视频| 麻豆精品蜜桃| 中文字幕日韩综合av| 中文字幕网址在线| 国产精品三级av| 欧美成人手机在线视频| 婷婷亚洲综合| 亚洲aaa激情| 婷婷在线播放| 亚洲精品国产精品国自产观看浪潮| 日本最新中文字幕| 久久亚洲精品国产精品紫薇| 欧美成人精品欧美一级乱| 成人高清电影网站| 成人中心免费视频| 美女日批视频在线观看| 亚洲精品乱码久久久久久按摩观| 久久夜色精品国产噜噜亚洲av| 久久久综合网站| 欧美三级午夜理伦三级富婆| 在线成人激情| 精品国产一区二区三区四区精华| 无码小电影在线观看网站免费 | 国产精品日本一区二区| 蜜桃麻豆影像在线观看| 在线a欧美视频| 国产不卡精品视频| 欧美日韩国产精品专区 | 偷拍自拍在线| 欧美视频一区二区三区| 精品爆乳一区二区三区无码av| 成人aa视频在线观看| 国产精品久久久久9999小说| 国产精品精品国产一区二区| 国产一区二区不卡视频| 亚洲天堂一区二区| 久久6精品影院| 青青草手机在线| 欧美丰满美乳xxx高潮www| 国产第一页在线播放| 国产三级精品三级在线专区| 粗大的内捧猛烈进出视频| 销魂美女一区二区三区视频在线| 椎名由奈jux491在线播放 | 精品一区二区三区毛片| 亚洲三级网址| 成人av影视在线| 成人免费黄色| 91精品国产高清自在线看超| 欧美性天天影视| 日韩精品在线视频观看| 国产毛片毛片毛片毛片毛片| 五月婷婷久久丁香| 欧美日韩黄色网| 中文字幕第一区综合| 国产一级黄色录像| 精彩视频一区二区| 成人小视频在线看| 好看的日韩av电影| 一本二本三本亚洲码| 奇米狠狠一区二区三区| 国产精品美女xx| 9999在线精品视频| 国产精品扒开腿做爽爽爽视频 | 五月婷婷欧美视频| 99热精品免费| 国产精品久久久久久久久晋中| 国产精品探花一区二区在线观看| 国产一本一道久久香蕉| 一区二区三区免费播放| 香蕉精品999视频一区二区 | 日韩一区二区三区四区在线| 国产人成一区二区三区影院| 国产一级伦理片| 国产成人在线网站| 成年人网站av| 激情综合亚洲精品| 欧美日韩一区二区三区69堂| 久久性色av| 日韩av资源在线| 国产视频一区在线观看一区免费| 精品久久久无码人妻字幂| 日韩专区精品| 亚洲精品一区二| 成人黄色小视频| 日韩欧美亚洲区| 国产一区二区三区91| 欧美日韩在线观看一区| 天堂av一区二区三区在线播放 | 国产精品美女午夜av| 欧美18—19sex性hd| 2019av中文字幕| 小h片在线观看| 日本亚洲欧洲色α| 不卡一二三区| 国产精品激情自拍| 国产第一亚洲| 国产日韩综合一区二区性色av| 成人激情视屏| 91社区国产高清| 亚洲欧美日本国产| 国产精品嫩草在线观看| 国产精品videossex| 国产精品久久久久久免费观看 | 日韩高清av一区二区三区| 天堂中文字幕av| 亚洲色图35p| av资源网站在线观看| 色偷偷偷综合中文字幕;dd| 日韩精品毛片| 欧美日韩国产成人| 91九色porn在线资源| 26uuu亚洲国产精品| 自由日本语热亚洲人| 国产激情久久久久| 99综合久久| 国产一区国产精品| 亚洲桃色综合影院| 亚洲视频在线二区| 欧美日韩国产综合网| 91猫先生在线| 美日韩一区二区三区| 古装做爰无遮挡三级聊斋艳谭| 成人免费av网站| 国产精品一二三区在线观看| 国产精品无人区| 免费在线观看亚洲| 色诱视频网站一区| 国产免费不卡av| 日韩电影免费在线观看中文字幕 | 欧美性生活一级片| 亚洲v国产v| 国产精品mm| chinese少妇国语对白| 国产在线精品一区二区夜色| 中国免费黄色片| 欧美激情在线看| 国产在线综合网| 精品视频全国免费看| 亚洲乱码在线观看| 亚洲美女中文字幕| 国产精品久久麻豆| 青青草成人在线| 国产日本亚洲| 日韩视频精品| 影音国产精品| 亚洲免费成人在线视频| 91亚洲大成网污www| 国产免费久久久久| 香蕉久久一区二区不卡无毒影院| 最近中文在线观看| 日韩精品中文在线观看| 大地资源网3页在线观看| 日本韩国欧美精品大片卡二| 国产精品免费精品自在线观看| 欧美1o一11sex性hdhd| 欧美日韩午夜| 日韩av在线中文| 久久品道一品道久久精品| 欧美黄色一区二区三区| 欧美日韩亚州综合| 欧美偷拍视频| 欧美国产第一页| 四虎精品一区二区免费| 欧美一区二区三区四区五区六区| 国产精品99一区二区| 欧美精品 - 色网| 亚洲国产电影在线观看| 五月天激情国产综合婷婷婷| 精品人在线二区三区| 大片免费在线观看| 成人写真视频福利网| 欧美在线色图| 国产激情在线观看视频| 99视频超级精品| 国产无码精品一区二区| 欧美不卡激情三级在线观看| 麻豆网站在线免费观看| 国产美女扒开尿口久久久| 欧美理论视频| 免费大片在线观看| 久久久一区二区三区捆绑**| 日本五十熟hd丰满| 精品国产精品一区二区夜夜嗨| 中文字幕伦理免费在线视频 | 成人77777| 国产精品扒开腿做爽爽爽的视频| 久操精品在线| 日本成人黄色网| 日本一区免费视频| 超碰在线免费97| 在线观看久久av| 99热播精品免费| 一区二区三区国| 久久国产日韩欧美精品| 情侣偷拍对白清晰饥渴难耐| 欧美日韩高清在线播放| 免费黄色在线| 亚洲影院污污.| 亚洲天堂男人| 欧美大片免费播放器| 欧美午夜片欧美片在线观看| 三级在线播放| 国产精品久久久久久久av电影| 区一区二视频| 中文字幕剧情在线观看| 亚洲综合久久av| 三级视频网站在线| 国产v综合ⅴ日韩v欧美大片| 欧美一级淫片| 最新av免费在线观看| 亚洲黄色小说网站| 天天综合天天综合| 国产999在线| 久久综合88| 色播亚洲婷婷| 99国内精品| 欧美亚一区二区三区| 色婷婷综合久久久久中文一区二区| 天堂a√在线| 国产精品丝袜一区二区三区| 91精品综合久久久久久久久久久| 国内av一区二区| 亚洲福利一二三区| 男人久久精品| 国产日韩欧美另类| 欧美另类亚洲| 国精产品一区二区三区| 欧美精品丝袜久久久中文字幕| 免费在线观看的电影网站| 久久99精品久久久久久青青日本| 日韩国产欧美在线观看| 久久久精品视频免费观看| 亚洲精品v天堂中文字幕| 中韩乱幕日产无线码一区| 99久热在线精品视频| 久久久久久久久久久久久久久99 | 一本色道88久久加勒比精品| 永久免费av无码网站性色av| 欧美一级精品大片| 午夜影院在线播放| 黄色网络在线观看| 久久综合久久综合亚洲| 国产乱人乱偷精品视频| 欧美伊久线香蕉线新在线| 9191国语精品高清在线| 精品人妻互换一区二区三区| 欧美一区二区精品在线| 男人最爱成人网| 91久久久久久久|