亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

js數組方法reduce經典用法代碼分享

2024-05-06 16:41:49
字體:
來源:轉載
供稿:網友

以下是個人在工作中收藏總結的一些關于javascript數組方法reduce的相關代碼片段,后續遇到其他使用這個函數的場景,將會陸續添加,這里作為備忘。

javascript數組那么多方法,為什么我要單挑reduce方法,一個原因是我對這個方法掌握不夠,不能夠用到隨心所欲。另一個方面,我也感覺到了這個方法的龐大魅力,在許多的場景中發揮著神奇的作用。

理解reduce函數

reduce() 方法接收一個函數作為累加器(accumulator),數組中的每個值(從左到右)開始縮減,最終為一個值。

arr.reduce([callback, initialValue])

看如下例子:

let arr = [1, 2, 3, 4, 5];// 10代表初始值,p代表每一次的累加值,在第一次為10// 如果不存在初始值,那么p第一次值為1// 此時累加的結果為15let sum = arr.reduce((p, c) => p + c, 10); // 25// 轉成es5的寫法即為:var sum = arr.reduce(function(p, c) { console.log(p); return p + c;}, 10);

片段一:字母游戲

const anagrams = str => { if (str.length <= 2) {  return str.length === 2 ? [str, str[1] + str[0]] : str; } return str.split("").reduce((acc, letter, i) => {  return acc.concat(anagrams(str.slice(0, i) + str.slice(i + 1)).map(val => letter + val)); }, []);}anagrams("abc"); // 結果會是什么呢?

reduce負責篩選出每一次執行的首字母,遞歸負責對剩下字母的排列組合。

片段二:累加器

const sum = arr => arr.reduce((acc, val) => acc + val, 0);sum([1, 2, 3]);

片段三:計數器

const countOccurrences = (arr, value) => arr.reduce((a, v) => v === value ? a + 1 : a + 0, 0);countOccurrences([1, 2, 3, 2, 2, 5, 1], 1);

 

循環數組,每遇到一個值與給定值相等,即加1,同時將加上之后的結果作為下次的初始值。

片段四:函數柯里化

函數柯里化的目的就是為了儲存數據,然后在最后一步執行。

const curry = (fn, arity = fn.length, ...args) =>  arity <= args.length ? fn(...args) : curry.bind(null, fn, arity, ...args);curry(Math.pow)(2)(10);curry(Math.min, 3)(10)(50)(2);

通過判斷函數的參數取得當前函數的length(當然也可以自己指定),如果所傳的參數比當前參數少,則繼續遞歸下面,同時儲存上一次傳遞的參數。

片段五:數組扁平化

const deepFlatten = arr =>  arr.reduce((a, v) => a.concat(Array.isArray(v) ? deepFlatten(v) : v), []);deepFlatten([1, [2, [3, 4, [5, 6]]]]);

片段六:生成菲波列契數組

const fibonacci = n => Array(n).fill(0).reduce((acc, val, i) => acc.concat(i > 1 ? acc[i - 1] + acc[i - 2] : i), []);fibonacci(5);

片段七:管道加工器

const pipe = (...funcs) => arg => funcs.reduce((acc, func) => func(acc), arg);pipe(btoa, x => x.toUpperCase())("Test");

通過對傳遞的參數進行函數加工,之后將加工之后的數據作為下一個函數的參數,這樣層層傳遞下去。

片段八:中間件

const dispatch = action => { console.log('action', action); return action;}const middleware1 = dispatch => { return action => {  console.log("middleware1");  const result = dispatch(action);  console.log("after middleware1");  return result; }}const middleware2 = dispatch => { return action => {  console.log("middleware2");  const result = dispatch(action);  console.log("after middleware2");  return result; }}const middleware3 = dispatch => { return action => {  console.log("middleware3");  const result = dispatch(action);  console.log("after middleware3");  return result; }}const compose = middlewares => middlewares.reduce((a, b) => args => a(b(args)))const middlewares = [middleware1, middleware2, middleware3];const afterDispatch = compose(middlewares)(dispatch);const testAction = arg => { return { type: "TEST_ACTION", params: arg };};afterDispatch(testAction("1111"));

 

redux中經典的compose函數中運用了這種方式,通過對中間件的重重層疊,在真正發起action的時候觸發函數執行。
片段九:redux-actions對state的加工片段
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美孕妇孕交黑巨大网站| 亚洲人成在线电影| 国产一区二区色| 欧美亚洲一级片| 欧美午夜片欧美片在线观看| 国产成人精品最新| 国产男女猛烈无遮挡91| 精品国产31久久久久久| 国产精品户外野外| 欧美性69xxxx肥| 亚洲精品电影网站| 久久精品青青大伊人av| 久久99久久99精品中文字幕| 91精品国产自产在线| 高清欧美性猛交xxxx黑人猛交| 一区二区三区 在线观看视| 亚洲免费视频网站| 97**国产露脸精品国产| 国产成人精品av| 成人免费看黄网站| 亚洲美女在线看| 欧美性受xxxx白人性爽| 国产精品99免视看9| 6080yy精品一区二区三区| 国产精品久久999| 国产mv免费观看入口亚洲| 亚洲精品久久久久中文字幕二区| 一区二区三区回区在观看免费视频| 欧美xxxwww| www高清在线视频日韩欧美| 日韩欧美在线观看视频| 亚洲天天在线日亚洲洲精| 亚洲欧美国产制服动漫| 国产精品一区二区三区久久| 国产日韩在线观看av| 2021久久精品国产99国产精品| 成人黄色av免费在线观看| 欧美夫妻性生活视频| 黄色精品在线看| 一区二区三区动漫| 国产精品精品视频| 日韩电影网在线| 久久久精品影院| 久久亚洲影音av资源网| 亚洲男人天堂视频| 国产精品揄拍一区二区| 国产在线精品成人一区二区三区| 欧美性猛交xxxx乱大交蜜桃| 国产欧美一区二区三区久久人妖| 国产精品一区二区女厕厕| 日韩电影视频免费| 日韩av免费看| 成人网在线免费看| 久久亚洲精品一区二区| 亚洲精品视频二区| 欧美成aaa人片免费看| 九九热精品视频国产| 欧美激情高清视频| 日韩免费在线电影| 国产精品久久婷婷六月丁香| 国产日韩欧美电影在线观看| 亚洲国产精品va在线| 亚洲国产女人aaa毛片在线| 久久99热精品| 久久福利视频网| 91精品国产91久久久| 国产欧美韩国高清| 91香蕉嫩草影院入口| 国产精品678| 国产精品久久电影观看| 国产成人在线播放| 久久夜色精品亚洲噜噜国产mv| 欧洲成人在线视频| 91嫩草在线视频| 亚洲精品电影久久久| 浅井舞香一区二区| 欧美日韩国产精品专区| 亚洲欧美国产va在线影院| 欧美大学生性色视频| 精品女同一区二区三区在线播放| 在线观看日韩专区| 国外成人在线播放| 国产美女精品视频免费观看| 成人黄色激情网| 97精品视频在线观看| 国内精品视频久久| 夜夜嗨av色一区二区不卡| 国产一区二区日韩精品欧美精品| 亚洲**2019国产| 欧美超级免费视 在线| 国产精品999999| 欧美午夜片在线免费观看| 欧美日韩一区二区三区在线免费观看| 精品视频久久久久久| 最近中文字幕mv在线一区二区三区四区| 成人激情在线观看| 亚洲女人初尝黑人巨大| 国产精品视频一区国模私拍| 91在线免费看网站| 国产精品嫩草视频| 亚洲国产欧美一区二区三区久久| 欧美日韩成人在线观看| 欧美久久精品一级黑人c片| 成人激情视频在线观看| 亚洲激情视频在线观看| 91色视频在线观看| 成人av.网址在线网站| 国产精品久久久久久久久久久新郎| 91国产精品视频在线| 精品一区电影国产| 亚洲国产福利在线| 国产日韩精品一区二区| 国产精品1234| 国产一区香蕉久久| 久久精品视频亚洲| 精品国偷自产在线| 日韩高清不卡av| 奇米成人av国产一区二区三区| 中文国产成人精品久久一| 欧美有码在线观看| 欧美精品一区二区免费| 欧美成人h版在线观看| 国产美女被下药99| 精品人伦一区二区三区蜜桃免费| 色阁综合伊人av| 在线观看欧美日韩国产| 国产精品入口夜色视频大尺度| 国产日韩欧美视频| 亚洲精品自在久久| 国产精品中文字幕在线| 精品中文字幕在线| 欧美国产日韩一区二区三区| 粉嫩av一区二区三区免费野| 亚洲欧美国产视频| 欧美野外猛男的大粗鳮| 欧美二区乱c黑人| 成人性生交大片免费看视频直播| 国产欧美一区二区三区久久人妖| 欧美日本啪啪无遮挡网站| 亚洲成人在线网| 中文字幕日韩欧美在线视频| 日韩一区二区精品视频| 国产精自产拍久久久久久蜜| 亚洲aⅴ日韩av电影在线观看| 国产精品久久久久久久久久三级| 成人精品视频在线| 国产精品自产拍在线观看| 欧美日韩免费区域视频在线观看| 日韩精品免费在线观看| 久久久精品在线观看| 国产精品成人国产乱一区| 日韩免费av片在线观看| 国产亚洲福利一区| 91免费视频网站| 色樱桃影院亚洲精品影院| 91午夜理伦私人影院| 国产一区二区在线播放| 日韩欧美国产激情| 亚洲热线99精品视频| 日本精品视频在线播放| 55夜色66夜色国产精品视频| 欧美亚洲成人xxx| 欧美午夜影院在线视频| 国产精品久久久久久av福利软件|