JavaScript関数式プログラミング(Funtional Programming)組み合わせ関数(Compsition)用法分析

5109 ワード

本論文の実例は、JavaScript関数式プログラミング(Funtional Programming)組み合わせ関数(Compsition)の使い方を説明する.皆さんに参考にしてあげます.具体的には以下の通りです.
コンボ関数とは、2つ以上の関数を組み合わせて、新しい関数にします.組合せ関数という概念をよく説明する良い例を見つけた.
例えば一つのアプリケーションは主に日常の費用を記録しています.アプリケーションのデータはこのように見えます.

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 === '  ')
}

get Household関数にfilterが使われています.特定の条件を満たす項目をフィルタできます.ここでtypeの値を「日常」の項目でフィルタリングします.
今、もし「日常」タイプの費用と販売の合計を得たいなら、こうしてもいいです.

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

上記では、まずget Household関数を使って、すべての「日常」タイプの項目を得て、sum関数で合計しました.最終的に戻ったのは、すべての「日常」タイプの項目の合計費用です.
上記の使用によって、私たちは「日常」タイプの項目を合計するためのコンボ関数を作成することができます.最初に結合関数用の関数を作成します.

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

作成したこのcompse関数で二つの関数を組み合わせることができます.

const sumHousehold = compose(getHousehold, sum)

sumHouseholdはグループです.get Householdとsumを組み合わせました.今sumHouseholdにデータを提供したら、例えば最初に定義したexpensesは、まずget Householdですべての「日常」タイプの項目を獲得してから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という関数はget CategoriesとuniqueElement関数を組み合わせています.uniqueCategoriesに渡したデータは、先にgetCategoriesによって処理されます.すべての分類が得られます.これらの分類はまたuniqueElementによって処理されます.この関数は唯一の項目になります.

uniqueCategories(expenses)
// ["  ", "  ", "  "]

完全なコード

//       
const expenses = [
 {
  name: '  ',
  price: 3000,
  type: '  '
 }, {
  name: '     ',
  price: 600,
  type: '  '
 }, {
  name: '    ',
  price: 50,
  type: '  '
 }, {
  name: '  ',
  price: 100,
  type: '  '
 }
];
//        price
const 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常用関数技術まとめ」、「javascript対象入門教程」、「JavaScriptエラーとデバッグ技術まとめ」、「JavaScriptデータ構造とアルゴリズム技法まとめ」及び「JavaScript数学演算用法まとめ」
本論文で述べたように、JavaScriptプログラムの設計に役に立ちます.