精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲精品888| 黄色免费在线观看| 久久激情综合| 久久九九有精品国产23| 人妻互换一二三区激情视频| 久草在线资源福利站| 中文字幕va一区二区三区| 51国偷自产一区二区三区| 久久久久久91亚洲精品中文字幕| 成人精品亚洲| 日本午夜精品视频在线观看| 久久久国产一区二区三区四区小说 | 深夜福利视频一区| 久久电影国产免费久久电影| 91精品国产91久久| 极品久久久久久| 女人抽搐喷水高潮国产精品| 欧美麻豆精品久久久久久| 亚洲 高清 成人 动漫| 国产秀色在线www免费观看| 91麻豆.com| 成人情视频高清免费观看电影| 91青青草视频| 狠狠综合久久| 久久久精品亚洲| 亚洲国产av一区| 精品少妇一区| 日韩免费成人网| 一本一道久久a久久综合蜜桃| 韩国精品一区| 亚洲一区在线观看视频| 一区二区三区国| 国产在线视频你懂得| www.欧美日韩| 国产精品美女诱惑| 国产免费一区二区三区最新不卡| 日韩不卡一区二区三区| 青青久久av北条麻妃黑人| 99免费在线观看| 亚洲第一在线| 91精品国产91久久久久久不卡 | 午夜精品毛片| 在线视频日韩精品| 性欧美精品中出| 偷拍亚洲色图| 亚洲欧美国产制服动漫| 国产ts丝袜人妖系列视频| 久久精品凹凸全集| 日韩av在线免播放器| 日本黄色免费观看| 欧美美女在线直播| 亚洲精品久久久久中文字幕欢迎你 | 在线视频精品一区| 免费高清完整在线观看| 成人欧美一区二区三区黑人麻豆| 在线视频福利一区| 宅男在线观看免费高清网站| 一区二区免费视频| 国产乱淫av片杨贵妃| 丁香花在线观看完整版电影| 亚洲sss视频在线视频| 日本一道本久久| 欧美国产大片| 欧美日本一道本在线视频| 日本国产一级片| 欧洲大片精品免费永久看nba| 日韩精品一区二区三区在线| 人妻 丝袜美腿 中文字幕| 国产精品极品在线观看| 亚洲欧美国产日韩中文字幕| 国产在线免费av| 中文字幕亚洲综合久久五月天色无吗''| 久久精品国产亚洲7777| 久热精品在线观看| 亚洲精品日韩av| 在线观看日韩羞羞视频| www.av在线| 亚洲欧洲国产专区| 97超碰在线视| 亚洲精品日产| 欧美三级一区二区| 久久久久无码精品| 日韩欧美天堂| 中文字幕免费精品一区| 波多野结衣亚洲一区二区| 91久久亚洲| 国产精品久久久久高潮| 午夜精品久久久久久久99老熟妇| 99精品欧美一区| 亚洲新中文字幕| 中文字幕乱码av| 一区二区国产在线观看| 国产精品美女主播| 精品人妻aV中文字幕乱码色欲| 91麻豆精品秘密| 大桥未久一区二区| 亚洲黄色免费看| 日韩视频在线一区二区| 精品人妻一区二区三区视频| 伊人久久大香线蕉精品组织观看| 911国产网站尤物在线观看| 97精品久久人人爽人人爽| thepron国产精品| 中文视频一区视频二区视频三区| 色老头在线一区二区三区| 欧美精品色综合| 在线免费观看黄色小视频| 真实国产乱子伦精品一区二区三区| 日本亚洲欧美三级| 丰满少妇被猛烈进入| 国产欧美日韩在线视频| 日本中文字幕网址| 国产精品国产三级在线观看| 国产一区二区三区免费视频| 国产精品不卡av| 国产精品一二三区在线| 亚洲精品高清国产一线久久| 东京一区二区| 欧美精品一区二区三区蜜桃视频| 任我爽在线视频| 日韩电影网1区2区| 蜜桃视频在线观看91| 欧美精品videosex| 91精品国产麻豆国产自产在线| 免费福利视频网站| 亚洲一区国产一区| 国产久一道中文一区| gogogogo高清视频在线| 欧美三级韩国三级日本三斤| 国产中年熟女高潮大集合| 国产日韩一区二区三区在线| 国产伦精品一区二区三区四区免费| 二区三区在线观看| 欧美精品一二三区| 91精品一区二区三区蜜桃| 美腿丝袜亚洲综合| 日本视频一区在线观看| 欧美色999| 亚洲色图偷窥自拍| 天堂网视频在线| 久久九九久久九九| 黄色高清无遮挡| 沈樵精品国产成av片| 国产成人综合精品| 男女污视频在线观看| 日韩欧美国产视频| 免费看黄色的视频| 美女一区二区视频| 影音先锋亚洲视频| 成人在线视频区| 欧美大片大片在线播放| 亚洲女同志亚洲女同女播放| 亚洲一区二区精品视频| 人妻换人妻a片爽麻豆| 激情文学一区| 久久本道综合色狠狠五月| 小视频免费在线观看| 精品亚洲一区二区三区在线播放 | 国产精品久久精品| 日本激情在线观看| 日韩天堂在线观看| 国产一卡二卡在线播放| 91在线小视频| 亚洲国产精品三区| 在线观看日韩| 国产伦精品一区二区三区视频免费| 蜜桃视频m3u8在线观看| 亚洲欧美日韩在线高清直播| 欧美 亚洲 另类 激情 另类| 国产精品国产三级国产a| 久久精品无码一区二区三区毛片| 在线国产日韩| 日韩三级电影免费观看| 精品99re| 热久久99这里有精品| av在线电影网| 精品少妇一区二区三区在线播放| 日韩av无码中文字幕| 欧美国产欧美亚州国产日韩mv天天看完整| 不卡的av中文字幕| 亚洲欧洲午夜| 亚洲免费不卡| 欧美一区二区三区红桃小说| 国产精品久久不能| aa视频在线观看| 中文字幕欧美国内| 免费看黄网站在线观看| 欧美网站大全在线观看| 国产亚洲精品码| 国产蜜臀av在线一区二区三区| 国产精欧美一区二区三区白种人| 99av国产精品欲麻豆| 在线不卡视频一区二区| 国产精品qvod| 成人欧美一区二区三区在线湿哒哒 | 91精品入口| 日韩免费在线看| 18av在线视频| 中文字幕亚洲欧美| 深夜福利视频在线观看| 欧美一区二区视频在线观看2022| 亚洲天堂一区在线| 亚洲一区在线播放| 综合 欧美 亚洲日本| 99精品偷自拍| 中国老熟女重囗味hdxx| 青青草97国产精品免费观看无弹窗版| 和岳每晚弄的高潮嗷嗷叫视频| 久久性感美女视频| 欧美精品欧美精品| 狼人精品一区二区三区在线| 亚洲999一在线观看www| 秋霞国产精品| 欧美专区国产专区| av色在线观看| 欧美激情aaaa| 欧美r级在线| 亚洲午夜女主播在线直播| 三级视频在线看| 日韩女同互慰一区二区| 国产精品玖玖玖| 欧美少妇xxx| 波多野结衣理论片| 疯狂蹂躏欧美一区二区精品| 国产在线免费视频| 一区二区三区国产豹纹内裤在线| 手机免费观看av| 国产日韩综合av| 国产精品815.cc红桃| av电影天堂一区二区在线| 亚洲精品无码一区二区| 国产成人免费视频一区| www.51色.com| 国产精品一区三区| 国产探花在线观看视频| 精品一区二区三区免费观看| 国产视频手机在线播放| 青青草精品视频| 我看黄色一级片| 蜜桃久久精品一区二区| 日韩一级理论片| 日韩精品免费专区| 亚洲成人福利在线观看| 日本欧美在线观看| 色播五月综合网| 久久99热狠狠色一区二区| 91亚洲免费视频| 精品一区二区三区久久久| 在线看免费毛片| 国产一区二区三区在线观看精品| 97超碰人人看| 成人午夜av电影| 男男做爰猛烈叫床爽爽小说| 91小视频在线观看| 国产又粗又猛又爽视频| 国产精品高潮久久久久无| 男女全黄做爰文章| 亚洲人成7777| av资源吧首页| 欧美午夜精品久久久久久人妖| 无码人妻精品一区二区三区9厂| 日本精品免费观看高清观看| 中文字幕乱码人妻无码久久 | 亚洲欧美强伦一区二区| 精品亚洲精品福利线在观看| 国产无套粉嫩白浆在线2022年| 中文字幕成人在线| av毛片在线免费| 97久久伊人激情网| 欧美日韩国产网站| 亚洲综合一区二区不卡| 精品女人视频| 色中色综合成人| 午夜精品国产| 精品久久久久久久免费人妻| 韩国av一区二区三区四区| 成年人小视频在线观看| 久久精品日产第一区二区三区高清版| 在线观看黄网址| 亚洲国产日韩精品| 青青草视频在线观看免费| 7878成人国产在线观看| 五月天婷婷视频| 色一情一乱一区二区| 超碰在线网站| 国产精品直播网红| 久久91在线| 久久久国产精华液999999| 亚洲国产午夜| 午夜天堂在线视频| 91视频在线看| 欧美成人精品一区二区免费看片 | 亚洲综合20p| 91视频免费看| 成人观看免费视频| 在线观看精品一区| 成人免费一级视频| 日韩综合中文字幕| 亚洲黄色中文字幕| 国产精品久久精品视| 国产韩日影视精品| 欧美日韩在线不卡视频| 国产成人精品免费| 久久久精品少妇| 色欲综合视频天天天| 刘亦菲久久免费一区二区| 最新国产成人av网站网址麻豆| 成入视频在线观看| 97超碰在线播放| 日韩精品永久网址| 久久国产乱子伦免费精品| 粉嫩蜜臀av国产精品网站| 激情无码人妻又粗又大| 色婷婷亚洲婷婷| 天天干天天操av| 欧美第一淫aaasss性| 亚洲成人1区| 亚洲一区二区精品在线观看| 久久不射中文字幕| 精品人妻一区二区三区香蕉| 亚洲一区二区综合| 国产探花精品一区二区| 日韩在线视频中文字幕| 欧美色网在线| 欧美亚洲免费高清在线观看| 99精品国产在热久久下载| 成人一区二区三区仙踪林| 亚洲免费大片在线观看| 国产一区二区三区四区视频 | 日韩伦理av| 51蜜桃传媒精品一区二区| 97精品视频| 中文字幕中文在线| 亚洲欧美综合色| 一区二区三区亚洲视频| 日韩在线观看你懂的| 男女啪啪999亚洲精品| 亚洲国产日韩综合一区| 免费av网站大全久久| 欧美激情久久久久久久| 欧美少妇bbb| 色开心亚洲综合| 96pao国产成视频永久免费| 偷偷www综合久久久久久久| 欧美成人乱码一二三四区免费| 日韩深夜视频| 国产三级精品三级| 国产尤物在线视频| 亚洲电影第1页| av小说在线播放| 国产一区二区免费电影| 亚洲人妖在线| 最新中文字幕视频| 日本高清免费不卡视频| 国产特黄在线| 成人a在线视频| 欧美韩日精品| 91人妻一区二区| 激情亚洲一区二区三区四区| 青青草视频免费在线观看| 国产精品国产三级国产aⅴ9色| 欧美亚洲国产激情| 亚洲综合伊人久久| 亚洲一区二区三区中文字幕| 亚洲 欧美 自拍偷拍| 国产成人精品在线观看| 99re久久最新地址获取| 麻豆传媒在线看| 欧美日韩另类视频| 成人高潮成人免费观看| 亚洲精品免费网站| 99精品热视频只有精品10| 中文字幕人妻一区二区三区在线视频| 欧美日韩免费一区二区三区视频| а√天堂8资源在线官网| 国产色综合一区二区三区| 日日噜噜夜夜狠狠视频欧美人 | 国产精品网站在线播放| 国产剧情精品在线| 97视频在线观看播放| 欧美亚洲国产精品久久| 精产国品一区二区三区| 色综合 综合色| 伊人在我在线看导航| 免费久久99精品国产自| 韩国视频一区二区| 丰满人妻老熟妇伦人精品| 麻豆成人在线看| 国产在线观看91一区二区三区| 亚洲一级片免费观看| 欧美性猛交xxxx富婆| av香蕉成人| 日韩精彩视频| 成人sese在线| 国产尤物在线观看| 日韩美女中文字幕| 欧美另类视频| 国产一二三四视频| 日韩电视剧在线观看免费网站| 国产欧美日韩电影|