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

深入淺出數組reduce,看完就會

開發 前端
如果reduce?給了初始值,那么prev?是就是當前傳入的初始值,如果沒有初始值,則默認就是當前數組的首項,cur就是第二元素,默認沒有初始值會比給初始值少一次循環。

本篇是筆者深入理解reduce的一篇筆記,希望看完在項目中有所思考和幫助。

reduce

reduce() 方法對數組中的每個元素按序執行一個由您提供的 reducer 函數,每一次運行 reducer 會將先前元素的計算結果作為參數傳入,最后將其結果匯總為單個返回值。,這是官方MDN上給的一段話。

每次將會把前一次的計算結果當成下次的參數傳入,什么意思?

我們看一下簡單的例子;

const sum = (arr) => {
return arr.reduce((prev, cur) => {
return prev + cur
}, 0)
}
console.log('sum: ', sum([1,2,3,4,5])) // 15

結果是15,嘿,這個sum就是這么簡單嗎?我們看下之前是怎么寫的;

const sum2 = (arr) => {
let ret = 0;
arr.forEach(val => {
ret+=val;
})
return ret
}
console.log('sum2:', sum2([1,2,3,4,5])) // 15

我們發現在之前我們的做法是循環計算,reduce的方式比循環方式代碼要簡單得多,但是并不是像循環方式一樣那么通俗易懂,具體我們斷點分析一下;

const sum = (arr) => {
return arr.reduce((prev, cur) => {
debugger;
return prev + cur
}, 0)
}
console.log('sum: ', sum([1,2,3,4,5])) // 15

首次:

圖片

其實我們發現,?reduce?回調函數內,第一個參數prev?默認就是初始值傳入的0?,然后cur就是每次循環數組的當前值。

第一次:prev:0, cur: 1,執行返回結果0+1,為第二次循環的初始值prev:1。

第二次:prev:1, cur:2,執行返回結果1+2,為第三次循環的初始值prev:3。

...

第五次:prev:10, cur:5,執行返回結果10+5,結束。

所以我們始終記住這個萬能公式就行,prev首次是默認傳入的值,當循環迭代下一次循環時,會將上一次返回的結果作為prev,cur永遠是當前迭代的item。

var arr = [];
const callback = (prev, current, currentIndex, source) => {
// 首次prev = init, 后面每次計算后結果作為下一次的prev,current是當前arr的item
// current: 當前的數組的item
// currentIndex: 當前索引
// source 原數組,也是arr
}
arr.reduce(callback, init?)

注意init是可選的,如果有值,則prev默認取它,那么current就取默認第一個值,如果init沒有值,那么prev就是第一個,current就是第二值,你會發現不給默認值,比給默認值少了一次循環。

const sum = (arr) => {
return arr.reduce((prev, cur, curentIndex, arr) => {
console.log(prev, cur, curentIndex, arr)
return prev + cur
})
}
console.log('sum: ',sum([1,2,3,4,5])) // 15
// 1 2 1 [1, 2, 3, 4, 5]
// 3 3 2 [1, 2, 3, 4, 5]
// 6 4 3 [1, 2, 3, 4, 5]
// 10 5 4 [1, 2, 3, 4, 5]

過濾數據中指定字段數據;

用reduce過濾指定需要的字段;

let sourceArr = [
{id: 1, name: 'Web技術學苑', age: 18},
{id: 2, name: 'Maic', age: 20},
{id: 3, name: 'Tom', age: 16},
]
const ret = sourceArr.reduce((prev, cur) => {
const {id, age} = cur;
return prev.concat({id, age})
}, [])
console.log(ret);
// [ { id: 1, age: 18 }, { id: 2, age: 20 }, { id: 3, age: 16 } ]

如果是用map大概就是下面這樣的了。

...
const ret2 = sourceArr.map(v => {
return { id: v.id, age: v.age }
})
console.log('ret2', ret2);

多維數組打平,二維轉一維;

reduce是下面這樣的;

const sourceArr2 = [[1,2,3], [4,5,6], [8,9], 0]
const ret3 = sourceArr2.reduce((prev, cur) => {
return prev.concat(cur)
}, [])

以前你可能會這樣的;

...
const ret4 = sourceArr2.flat(1)

或者用遞歸方式;

var flatLoop = (source, ret = []) => {
const loop = (arr) => {
arr.forEach(v => {
if (Array.isArray(v)) {
loop(v)
} else {
ret.push(v)
}
})
}
loop(source)
return ret
}
flatLoop(sourceArr2, [])

統計一個字符出現的次數;

forEach版本;

const strCount = (arr) => {
const obj = {}
arr.forEach(key => {
if (key in obj) {
obj[key]+=1;
} else {
obj[key]=1;
}
});
return obj
}
const ret5 = strCount(['a', 'a', 'b', 'c', 'd'])
console.log('ret5', ret5)
// ret5 {a: 2, b: 1, c: 1, d: 1}

reduce版本實現;

const strCount2 = (arr) => {
return arr.reduce((prev, cur) => {
if (cur in prev) {
prev[cur]+=1;
} else {
prev[cur] = 1;
}
return prev
}, {})
}
console.log('ret6', strCount2(['a', 'a', 'b', 'c', 'd']))

獲取數組中某個字段的所有集合;

var publicInfo = [
{
id: '1',
name: 'Web技術學苑',
age: 8
},
{
id: '2',
name: '前端從進階到入院',
age: 10
},
{
id: '3',
name: '前端之神',
age: 15
},
{
id: '3',
name: '前端之巔',
age: 12
}
]
const ret7 = publicInfo.map(v => v.name)
console.log('ret7', ret7)

reduce實現;

const ret8 = publicInfo.reduce((prev, cur) => {
return prev.concat(cur.name)
}, [])
console.log('ret8', ret8)

數據去重;

以前你可以用Set或者循環去做的

const sourceData = ['1','1', '2', 3,4,5,3]
console.log([...new Set(sourceData)]) // ['1','2',3,4,5]
// or
const obj = {}
sourceData.forEach(item => {
obj[item] = item
})
console.log(Object.values(obj))

reduce實現去重。

...
consy ret9 = sourceData.reduce((prev, cur) => {
if (prev.indexOf(cur) === -1) {
prev.push(cur)
}
return prev
}, [])

代替filter與map

假設我們有一個場景,就是在原數據中過濾找出age>10大于的數據并返回對應的name。

var publicInfo = [
{
id: '1',
name: 'Web技術學苑',
age: 10
},
{
id: '2',
name: '前端從進階到入院',
age: 10
},
{
id: '3',
name: '前端之神',
age: 12
},
{
id: '3',
name: '前端之巔',
age: 12
}
]
const ret11 = publicInfo.filter(v => v.age >10).map(v => v.name);
console.log(ret11); // ['前端之神', '前端之巔']

我們知道上面使用filter與map有兩次循環,但是reduce就可以做到僅一次循環就可以搞定。

...
publicInfo.reduce((prev, cur) => {
if (cur.age > 10) {
prev.push(cur.name)
}
return prev
}, [])

關于reduce[1]更多的實踐可以參考MDN文檔,在項目中更多的實踐以后再一一補充。

總結

主要分析了reduce這個計算方法特性,每次計算的結果會當成下一次的prev的初始值,第二個參數``cur`是當前循環數組的值。

如果reduce給了初始值,那么prev是就是當前傳入的初始值,如果沒有初始值,則默認就是當前數組的首項,cur就是第二元素,默認沒有初始值會比給初始值少一次循環。

以reduce實踐了一些例子,夯實reduce的一些用法特性。

本文示例源碼code example[2]。

參考資料

[1]reduce: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

[2]code example: https://github.com/maicFir/lessonNote/tree/master/javascript/22-reduce

責任編輯:武曉燕 來源: Web技術學苑
相關推薦

2022-09-26 09:01:15

語言數據JavaScript

2021-03-16 08:54:35

AQSAbstractQueJava

2011-07-04 10:39:57

Web

2017-07-02 18:04:53

塊加密算法AES算法

2012-05-21 10:06:26

FrameworkCocoa

2019-01-07 15:29:07

HadoopYarn架構調度器

2021-07-20 15:20:02

FlatBuffers阿里云Java

2019-11-11 14:51:19

Java數據結構Properties

2009-11-30 16:46:29

學習Linux

2018-11-09 16:24:25

物聯網云計算云系統

2021-04-27 08:54:43

ConcurrentH數據結構JDK8

2022-11-09 08:06:15

GreatSQLMGR模式

2012-02-21 13:55:45

JavaScript

2022-10-31 09:00:24

Promise數組參數

2009-11-18 13:30:37

Oracle Sequ

2022-12-02 09:13:28

SeataAT模式

2019-12-04 10:13:58

Kubernetes存儲Docker

2022-01-11 07:52:22

CSS 技巧代碼重構

2025-03-27 09:38:35

2016-10-14 13:53:05

JavascriptDOMWeb
點贊
收藏

51CTO技術棧公眾號

国产原创视频在线观看| 中文字幕免费高清网站| 亚洲视频三区| 亚洲成a人片综合在线| 久久久一本精品99久久精品| 国产性生活视频| 手机亚洲手机国产手机日韩| 日韩欧美在线网站| 欧美aⅴ在线观看| 在线观看精品一区二区三区| 高清不卡在线观看| 国产www精品| 久久久综合久久| 欧美一区三区| 亚洲电影中文字幕| 黄大色黄女片18第一次| 第四色日韩影片| 国产精品午夜免费| 精品国产乱码久久久久久108| 欧美高清性猛交| 伊甸园精品99久久久久久| 亚洲精品无码专区| 日本亚洲最大的色成网站www| 久久久精品中文字幕| 一级性生活大片| 精品午夜视频| 欧美日韩亚洲综合一区二区三区 | 免费成人高清在线视频theav| 欧美三级韩国三级日本一级| 日本熟妇人妻xxxx| 黄色在线论坛| 中国色在线观看另类| 久草一区二区| 亚洲大尺度视频| 精品中文字幕一区二区小辣椒| 91高潮在线观看| 日韩a级片在线观看| 国模精品一区| 日韩精品中文字幕在线播放| 精品国产一二区| 疯狂欧洲av久久成人av电影| 欧美系列一区二区| 日韩 欧美 高清| 亚洲一二三四| 精品久久久视频| 欧美精品久久久久久久自慰| 影音先锋男人资源在线| 中文字幕日韩一区| 亚洲美女搞黄| 波多野结衣在线影院| 久久精品亚洲精品国产欧美 | 黄色永久免费网站| 一二区成人影院电影网| 色菇凉天天综合网| 欧美极品欧美精品欧美图片| 深夜在线视频| 欧美日韩在线另类| 男人日女人bb视频| 亚洲精品永久免费视频| 狠狠操狠狠色综合网| 欧洲精品一区二区三区久久| yellow字幕网在线| 精品久久久久久国产| 黄色www网站| 国产ktv在线视频| 欧美午夜精品伦理| 妞干网在线免费视频| 欧美动物xxx| 在线视频综合导航| 在线观看免费的av| 精品亚洲a∨一区二区三区18| 欧美一级夜夜爽| zjzjzjzjzj亚洲女人| 久久精品色播| 亚洲欧美综合v| 在线观看亚洲大片短视频| 久久一区91| 欧美巨乳在线观看| 久久久国产高清| 日韩av一级片| 成人在线视频网| 亚洲精品一区二区三区四区| 99视频精品全部免费在线| 欧美大香线蕉线伊人久久国产精品| 九色在线视频| √…a在线天堂一区| 亚洲熟妇无码av在线播放| 极品视频在线| 欧美日韩一区二区三区视频 | www.亚洲人| 欧美亚洲免费高清在线观看| 97电影在线| 亚洲综合色噜噜狠狠| 成人久久久久久久久| 涩涩涩久久久成人精品| 精品88久久久久88久久久| 大又大又粗又硬又爽少妇毛片| 日本一区二区免费高清| 欧美国产日韩中文字幕在线| 国产精品久免费的黄网站| 久久电影网站中文字幕| 国产综合色一区二区三区| 1024视频在线| 精品av在线播放| 爱豆国产剧免费观看大全剧苏畅 | 精品黑人一区二区三区久久| 乐播av一区二区三区| 综合久久亚洲| 国产精品成人国产乱一区 | 国产精品一区二区男女羞羞无遮挡| 精品欧美一区二区在线观看视频| 波多野结衣在线影院| 亚洲成年人网站在线观看| 天堂网在线免费观看| 亚洲黄页网站| 欧美理论电影在线播放| 波多野结衣电车| jlzzjlzz亚洲日本少妇| 日本黄色播放器| 91久久国产综合久久91猫猫| 欧美电影免费提供在线观看| 成人黄色a级片| 国产一区二区三区久久| 亚洲一区免费网站| 在线国产91| 日本精品一区二区三区四区的功能| 伊人影院在线观看视频| 日韩欧美中文| 国产精品mp4| 午夜视频免费在线| 亚洲午夜日本在线观看| 免费人成视频在线播放| 99精品在线| 国产精品网站大全| 国产天堂素人系列在线视频| 欧美日韩国产中文精品字幕自在自线| 黑人性生活视频| 五月激情综合| 国产在线日韩在线| eeuss影院www在线播放| 日本福利一区二区| 欧美黑人欧美精品刺激| 91久久黄色| 精品一区久久久| 大菠萝精品导航| 亚洲精品99久久久久| 久久成人国产精品入口| 国产成人精品免费在线| 狠狠噜天天噜日日噜| 欧美成人精品午夜一区二区| 欧美成人久久久| 精品人妻伦一二三区久久| 亚洲欧美日韩精品久久久久| 两性午夜免费视频| 欧美女激情福利| 国产欧美精品一区二区三区| h片在线观看下载| 亚洲国产精品视频在线观看| 国产又大又黑又粗免费视频| 99精品黄色片免费大全| 午夜精品久久久久久久无码| 精品欠久久久中文字幕加勒比| 97免费中文视频在线观看| 日批视频免费播放| 色综合久久综合| 欧洲性xxxx| 九九在线精品视频| 日韩精品一区二区在线视频| 91蝌蚪精品视频| 97av在线视频| www.91在线| 在线综合+亚洲+欧美中文字幕| 亚洲天堂黄色片| 成人va在线观看| 男人亚洲天堂网| 91综合久久一区二区| 91情侣偷在线精品国产| 国产偷倩在线播放| 亚洲人午夜精品免费| 最近中文字幕在线观看视频| 亚洲蜜桃精久久久久久久| 人妻互换一二三区激情视频| 免费视频一区| 亚洲一区二区四区| 国产乱人伦丫前精品视频| 国产成人精品一区| 91网址在线观看| 亚洲精品日韩久久久| 中文字幕在线观看国产| 亚洲一线二线三线久久久| 在线免费观看日韩av| 激情综合亚洲精品| 欧美极品欧美精品欧美| 水蜜桃久久夜色精品一区| 风间由美一区二区三区| 日韩中文在线播放| 欧美日韩第一视频| 粉嫩av一区| 精品国产污污免费网站入口| 超碰在线97观看| 一区av在线播放| 手机看片福利视频| 成人蜜臀av电影| 三级av免费观看| 亚洲裸体俱乐部裸体舞表演av| 翔田千里亚洲一二三区| 国产福利一区二区精品秒拍| 国产成人精品av在线| 欧美家庭影院| 综合国产在线观看| 头脑特工队2免费完整版在线观看| 欧美精品久久久久久久多人混战| 4438国产精品一区二区| 一区二区免费在线播放| 国产一区二区三区四区在线| 91小视频在线观看| 亚洲成人福利视频| 韩国av一区二区| 激情五月婷婷久久| 亚洲精品日本| 国产欧美123| 国产韩国精品一区二区三区| 欧美成人第一区| 国内自拍欧美| 91精品国产综合久久久久久丝袜| 成人亚洲网站| 国产成人拍精品视频午夜网站 | 奇米777在线| 免费观看在线综合| 人妻有码中文字幕| 亚洲精品影院在线观看| 亚洲精品天堂成人片av在线播放| 亚洲人成网77777色在线播放| 国产乱码精品一区二区三区中文 | 美女网站视频在线| 久久天天躁狠狠躁夜夜躁2014| 第一福利在线| 国产一区二区三区在线免费观看| 日韩在线视频免费| 亚洲第一视频在线观看| 亚洲av无码国产综合专区| 欧美一区二区在线免费播放 | 亚洲国产精品久久| 国产77777| 亚洲精品一区二区三区精华液 | 成人免费视频免费观看| 少妇欧美激情一区二区三区| 国产综合久久久久久久久久久久| 天天爽夜夜爽一区二区三区| 青青草97国产精品免费观看无弹窗版 | 四虎精品一区二区| 成人美女视频在线观看18| 成人欧美精品一区二区| 99视频在线精品| 国产美女喷水视频| 国产校园另类小说区| 一区二区三区伦理片| 久久久综合九色合综国产精品| 91视频在线网站| 国产精品美女www爽爽爽| 国产激情无码一区二区三区| 亚洲欧美激情一区二区| 久久av高潮av无码av喷吹| 亚洲国产裸拍裸体视频在线观看乱了| 国产真实的和子乱拍在线观看| 图片区小说区国产精品视频| 日日骚av一区二区| 精品视频123区在线观看| 国产一区二区三区三州| 日韩视频在线观看一区二区| 秋霞视频一区二区| 亚洲欧美精品一区| aiai在线| 色综合男人天堂| 国模冰冰炮一区二区| 国产精品一二三在线| 欧美在线在线| 免费成人深夜夜行视频| 91综合在线| 国产成人福利片| 91欧美一区二区三区| 国产99久久久国产精品潘金网站| 7788色淫网站小说| 中文字幕免费不卡| 九九久久免费视频| 狠狠干狠狠久久| 国产精品自偷自拍| 国产婷婷成人久久av免费高清 | 国产精品久久久久7777按摩| 九九视频免费在线观看| 精品福利在线视频| 亚洲一级在线播放| 亚洲国产精品美女| 2017亚洲天堂1024| 性欧美在线看片a免费观看| 日韩av首页| 国产经品一区二区| 青青草综合网| 成人毛片一区二区| 精品影院一区二区久久久| 国产激情视频网站| 中文字幕五月欧美| 一级黄色免费网站| 欧美一级精品大片| 高清在线观看av| 国模精品视频一区二区三区| 精品女同一区二区三区在线观看| 国产午夜精品在线| 91超碰成人| 不卡av免费在线| 91免费在线视频观看| 老湿机69福利| 日本高清免费不卡视频| 欧美自拍偷拍第一页| 精品国产一区二区三区久久久| 美女露胸视频在线观看| 91超碰在线电影| 日韩精品免费| 凹凸日日摸日日碰夜夜爽1| 粉嫩绯色av一区二区在线观看| 国产日产在线观看| 一本大道久久a久久综合| 日本久久一级片| 欧美成人精品一区二区| 91成人短视频在线观看| 翔田千里亚洲一二三区| 视频一区欧美精品| 五级黄高潮片90分钟视频| 亚洲成人激情自拍| 精品人妻一区二区三区日产乱码| 中文字幕日韩欧美在线| 欧美人体一区二区三区| 久久婷婷开心| 99在线观看免费视频精品观看| 韩国一区二区三区四区| 一区二区三区不卡视频| 精品国产九九九| 久久影视电视剧免费网站清宫辞电视| 成人久久网站| 亚洲欧洲在线一区| 日韩精品每日更新| 国产伦精品一区二区三区视频女| 色94色欧美sute亚洲线路一ni | 亚洲欧美日本国产| 波多野结衣 作品| 国产成人自拍在线| 久热精品在线观看| 欧美成人精品1314www| 毛片大全在线观看| 国产精品视频在线免费观看| 在线观看一区| 在线视频 日韩| 欧美日韩中文字幕日韩欧美| 免费在线超碰| 国产精品av免费在线观看| 青青草成人影院| 天天久久综合网| 一级做a爱片久久| 天堂av在线免费| 欧美一级片免费在线| 禁果av一区二区三区| 五月婷婷丁香色| 亚洲天堂精品视频| 亚洲精品第五页| 91成人精品网站| 欧美日韩一区二区三区视频播放| 日韩爱爱小视频| 亚洲女人****多毛耸耸8| 亚洲第一天堂在线观看| 91精品国产乱码久久久久久久久| 亚洲小说图片| 欧美美女一级片| 亚洲一二三区视频在线观看| 外国精品视频在线观看 | 国产一二三在线视频| 99久久精品99国产精品| 在线观看亚洲黄色| 久久成人一区二区| 久久a爱视频| 手机看片福利日韩| 一区二区三区精品在线观看| 五月婷婷丁香网| 国产精品丝袜久久久久久高清 | 日韩美女在线观看| 日韩成人综合| 中文字幕一区二区三区乱码不卡| 色综合天天天天做夜夜夜夜做| 免费在线午夜视频| 精品无码久久久久久久动漫| 日本成人超碰在线观看| 国产亚洲欧美精品久久久久久 | 在线中文字幕第一页| 久久99精品久久久久久青青日本| 日本免费新一区视频| 免费毛片在线播放免费| 亚洲午夜未删减在线观看| 精品一区二区三区四区五区| 成年人视频在线免费| 亚洲一区二区三区自拍| 国产精品免费观看|