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

首頁 > 開發 > JS > 正文

JavaScript函數式編程(Functional Programming)組合函數(Composition)用法分析

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

本文實例講述了JavaScript函數式編程(Functional Programming)組合函數(Composition)用法。分享給大家供大家參考,具體如下:

組合(Composition)函數,就是把兩個或以上的函數組合到一塊兒,整成一個新的函數。我找到了一個很好的例子,很好地解釋了組合函數這個概念。

比如一個應用主要是記錄一下日常的花銷(expenses),應用里的數據看起來像這樣:

const expenses = [ {  name: '租金',  price: 3000,  type: '日常' },  {  name: '阿里云服務',  price: 600,  type: '服務' },  {  name: '健身中心',  price: 50,  type: '健康' },  {  name: '水電',  price: 100,  type: '日常' }];

合計花銷

現在我要合計一下所有花銷,創建一個函數,用一下 map 與 reduce,這個函數像這樣:

const sum = (source) =>  source  .map((item) => item.price)  .reduce((accumulator, price) => accumulator + price, 0)

sum 這個函數接收一個 source 參數,在函數里,先用 map,返回 source 里的所有的 price(價格)。然后再用 reduce 去處理返回的 price ,這里就是合計所有的 price 的值。

這個函數用起來像這樣:

let total = sum(expenses) // 結果:3750

組合

現在我要合計一下我在某個類別下花的錢。比如我要合計一下 “日常” 這個分類里花的錢。先創建一個函數,可以返回所有 “日常” 類型的花銷。

const = getHousehold = (source) => { return source.filter((item) => item.type === '日常')}

getHousehold 函數里用了 filter ,它可以過濾出滿足特定條件的項目。這里就是把 type 的值是 “日常” 的項目過濾出來。

現在如果我想得到 “日常” 類型的花銷的合計的結果,可以這樣:

let householdExpenses = sum(getHousehold(expenses)) // 結果:3100

上面,我們先用 getHousehold 函數得到所有的 “日常” 類型的項目,然后又用 sum 函數合計了得到的結果。最終返回的就是所有 “日常” 類型的項目的合計花銷。

根據上面的使用,我們可以去創建一個組合函數,這個函數可以去合計 “日常” 類型的項目的花銷。先創建一個組合函數用的函數:

const compose = (function1, function2) => { return (source) => function2(function1(source))}

現在我們可以用創建的這個 compose 函數去組合兩個函數:

const sumHousehold = compose(getHousehold, sum)

sumHousehold 就是一個組合,它組合了 getHousehold 還有 sum?,F在如果你提供給 sumHousehold 一組數據,比如最開始我們定義的 expenses,首先會用 getHousehold 得到所有 “日常” 類型的項目,然后再用 sum 去合計這些項目。

sumHousehold(expenses)

新任務

我現在要得到花銷數據里的所有的分類:

const getCategories = (source) => { return source.map((item) => item.type)}

用一下這個函數:

getCategories(expenses)// ["日常", "服務", "健康", "日常"]

在返回的結果里,“日常” 這個分類出現了兩次。我們再去創建一個函數可以得到唯一的項目:

const uniqueElement = (source) => { return source.filter((item, position) => {  return source.indexOf(item) === position })}

現在我們再去創建一個組合函數:

const uniqueCategories = compose(getCategories, uniqueElement)

uniqueCategories 這個函數組合了 getCategories 還有 uniqueElement 函數。你交給 uniqueCategories 的數據,會先被 getCategories 處理,它會得到所有的分類,然后這些分類又會被 uniqueElement 處理,這個函數可以得以唯一的項目。

uniqueCategories(expenses)// ["日常", "服務", "健康"]

完整的代碼

// 應用里的數據const expenses = [ {  name: '租金',  price: 3000,  type: '日常' }, {  name: '阿里云服務',  price: 600,  type: '服務' }, {  name: '健身中心',  price: 50,  type: '健康' }, {  name: '水電',  price: 100,  type: '日常' }];// 合計數據里的 priceconst sum = (source) => source  .map((item) => item.price)  .reduce((accumulator, price) => accumulator + price, 0)// 得到數據里類型是 “日常” 的所有項目const getHousehold = (source) => source  .filter((item) => item.type === '日常')// 合計結果let total = sum(expenses)console.log(total)// 合計 “日常” 類型的花費let householdExpenses = sum(getHousehold(expenses))console.log(householdExpenses)// 創建組合函數用的函數const compose = (function1, function2) => { return (source) => function2(function1(source))}// 創建一個組合函數,可以合計 “日常” 類型的花費const sumHousehold = compose(getHousehold, sum)console.log(sumHousehold(expenses))// 得到數據里的所有分類const getCategories = (source) => { return source.map((item) => item.type)}console.log(getCategories(expenses))// 返回一個數組里的唯一元素const uniqueElement = (source) => { return source.filter((item, position) => {  return source.indexOf(item) === position })}// 創建一個組合函數,可以返回數據里的唯一分類const uniqueCategories = compose(getCategories, uniqueElement)console.log(uniqueCategories(expenses))

希望本文所述對大家JavaScript程序設計有所幫助。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品国产一区二区三区四区在线观看| 国产精品日韩欧美大师| 国产男女猛烈无遮挡91| 精品无人国产偷自产在线| 毛片精品免费在线观看| 91社区国产高清| 亚洲国产日韩一区| 久久国产加勒比精品无码| 92国产精品久久久久首页| 欧美电影免费在线观看| 久久久久久久一区二区三区| 韩国三级日本三级少妇99| 国产精品偷伦免费视频观看的| 亚洲精品在线看| 国产97在线|日韩| 日韩在线观看免费高清完整版| 国产91精品久久久久久久| 神马久久桃色视频| 国产成人avxxxxx在线看| 国产精品成人一区二区三区吃奶| 日韩美女毛茸茸| 久久亚洲春色中文字幕| 日韩亚洲欧美中文高清在线| 尤物yw午夜国产精品视频明星| 亚洲成人精品在线| 亚洲成年人影院在线| 久久精品国产久精国产思思| 久久国产精品视频| 亚洲色图35p| 精品国产鲁一鲁一区二区张丽| 欧美日韩国产999| 2018日韩中文字幕| 亚洲网站在线观看| 日韩免费观看高清| 国产精品视频免费在线观看| 日韩亚洲精品视频| 亚洲色图50p| 亚洲人成在线观看| 高跟丝袜一区二区三区| 日韩欧美在线视频日韩欧美在线视频| 日韩一区视频在线| 久久精品在线视频| 中文字幕在线看视频国产欧美| 亚洲大尺度美女在线| 亚洲黄色www| 欧美成人性色生活仑片| 国产精品一区二区av影院萌芽| 欧美日韩中文字幕在线视频| 欧美裸体xxxxx| 国内精品小视频| 综合激情国产一区| 欧美成人中文字幕在线| 97精品国产91久久久久久| 91情侣偷在线精品国产| 日本一区二区三区在线播放| 免费97视频在线精品国自产拍| 国产黑人绿帽在线第一区| 久久免费视频在线| 91精品啪在线观看麻豆免费| 国产精品久久久久高潮| 国产一区二区三区精品久久久| 国产精品xxx视频| 成人在线视频网站| 亚洲精品国产综合久久| 中文字幕av一区| 日韩精品免费在线视频观看| 欧美限制级电影在线观看| 国产亚洲精品日韩| 欧美一级片一区| 久久69精品久久久久久久电影好| 26uuu久久噜噜噜噜| 久久久久久91| 欧美另类交人妖| 岛国av一区二区三区| 久久天天躁狠狠躁夜夜av| 久久九九全国免费精品观看| 最新国产精品拍自在线播放| 国产成人精品午夜| 美日韩精品视频免费看| 亚洲成人xxx| 中国日韩欧美久久久久久久久| 欧美日韩成人黄色| 欧美日韩一区二区免费视频| 亚洲欧洲在线免费| 国产自产女人91一区在线观看| 国产精品视频白浆免费视频| 国产精品入口尤物| 色噜噜狠狠狠综合曰曰曰| 久久久久久国产| 成人午夜一级二级三级| 亚洲精品一区久久久久久| 亚洲国产精品电影在线观看| 亚洲第一区第一页| 国产精品观看在线亚洲人成网| 欧美视频在线免费看| 亚洲综合中文字幕在线观看| 国产成一区二区| 亚洲精品99999| 亚洲欧美中文日韩在线| 亚洲xxxx视频| 国产日韩中文字幕在线| 色狠狠av一区二区三区香蕉蜜桃| 欧美国产日韩一区| 尤物精品国产第一福利三区| 欧美一区二区影院| 久久成人人人人精品欧| 精品视频一区在线视频| 欧美激情极品视频| 在线看片第一页欧美| 欧美日韩另类字幕中文| 永久免费精品影视网站| 日韩中文字幕精品视频| 永久免费精品影视网站| 欧美一区二三区| 亚洲国产成人精品一区二区| 91福利视频在线观看| 日韩美女av在线免费观看| 81精品国产乱码久久久久久| 亚洲精品一区二区在线| 亚洲精品美女在线观看| 亚洲色图校园春色| 亚洲国产欧美一区二区三区同亚洲| 精品一区二区三区电影| 久久精品色欧美aⅴ一区二区| 国产精品综合久久久| 国外色69视频在线观看| 欧美电影第一页| 国产精品丝袜高跟| 成人福利网站在线观看11| 久久久久久亚洲精品| 日韩高清中文字幕| 91精品视频在线免费观看| 日韩中文字幕网址| 成人观看高清在线观看免费| 91精品国产91久久久久久吃药| 按摩亚洲人久久| 九九久久国产精品| 国产欧美一区二区三区久久人妖| 国产精品对白刺激| 国产人妖伪娘一区91| 欧美激情精品久久久久久久变态| 少妇高潮久久77777| 亚洲欧洲在线观看| 久久手机免费视频| 欧美日韩视频在线| 久久精品2019中文字幕| 国内揄拍国内精品少妇国语| 亚洲系列中文字幕| 国产精品亚洲自拍| 亚洲剧情一区二区| 国产精品久久久久77777| 欧美性生活大片免费观看网址| 日韩av免费在线观看| 亚洲第一福利网| 国内精品模特av私拍在线观看| 不卡av电影院| 亚洲一区二区三区毛片| 国产精品永久免费观看| 久久99精品久久久久久青青91| 国产精品视频播放| 亚洲成人国产精品| 91免费看片网站| 久久久久久av| 2021久久精品国产99国产精品|