Lodash-fpモジュール、Lodash-map方法の小さな問題、Pointfree
20011 ワード
ローダッシュのFPモジュール関数組合せを使って問題を解決する際には、lodashで提供される方法が使われますが、これらの方法に複数のパラメータがある場合は、これらの方法をコリック化する必要があります.これらの方法を新たに包装する必要があります.ちょっと面倒です.次に、lodashのfpモジュール を紹介します.lodash/fp lodashのfpモジュールは、実用的な関数式プログラミングに友好的な方法を提供している 可変aut-curried、iteratee-first、data-last を提供しています.
lodashとlodash/fpの実際使用時の違い プログラミングのスタイルですが、具体的には関数の組み合わせがより抽象的で、 Point Free:データ処理過程をデータとは関係ない合成演算として定義することができます.代表データのそのパラメータを使う必要はありません.簡単な演算手順を一緒に合成すれば、このようなモードを使う前に補助的な基本演算関数を定義する必要があります. 指定処理が不要なデータ 合成演算のみが必要 いくつかの補助的な基本演算関数を定義する必要がある(私たちが以前に関数を組み合わせて問題を解決するときはPoint Freeモードです) 判例デモ
// lodash --- ,
const _ = require('lodash')
console.log(_.map(['a', 'b', 'c'], _.toUpper))
// => [ 'A', 'B', 'C' ]
console.log(_.map(['a', 'b', 'c']))
// => [ 'a', 'b', 'c' ]
console.log(_.split('Hello World', ' '))
// => [ 'Hello', 'World' ]
// lodash/fp --- ,
const fp = require('lodash/fp')
console.log(fp.map(fp.toUpper, ['a', 'b', 'c']))
console.log(fp.map(fp.toUpper)(['a', 'b', 'c']))
// => [ 'A', 'B', 'C' ]
console.log(fp.split(' ', 'Hello World'))
console.log(fp.split(' ')('Hello World'))
// => [ 'Hello', 'World' ]
// lodash NEVER SAY DIE never-say-die
const _ = require('lodash')
const map = _.curry((fn, array) => _.map(array, fn))
const split = _.curry((sep,str) => _.split(str,sep))
const join = _.curry((sep, array) => _.join(array, sep))
const f = _.flowRight(join('-'), map(_.toLower), split(' '))
console.log(f('NEVER SAY DIE'))
// lodash/fp
const fp = require('lodash/fp')
const f = fp.flowRight(fp.join('-'), fp.map(fp.toLower), fp.split(' '))
console.log(f('NEVER SAY DIE'))
lodashとlodash/fpモジュールにおけるmapメソッドの違い//
// lodash
/**
* ,
*
* --- [23, NAN, 2] ---
*
* Map parseInt ,
*
* Map , ,
* :value - index|key - collection
* , index
* key
* collection
*
* :
* map , , parseInt
*
* : parseInt('23', 0, array)
* : parseInt('8', 1, array)
* : parseInt('10', 2, array)
*
* parseInt , , 2-36
*
* 0 , 10 ,
* 1 , , NAN
* 2 2 ,10 2 2
*
* , [23, 8, 10]
*
* parseInt, , lodash/fp
* */
const _ = require('lodash')
console.log(_.map(['23', '8', '10'], parseInt))
// => [23, NAN, 2]
/**
* lodash/fp map ,
*
* Map , , fp
* , , lodash map
* , lodash/fp !
* */
const fp = require('lodash/fp')
console.log(fp.map(parseInt, ['23', '8', '10']))
// => [23, 8, 10]
Point Freeconst f = fp.flowRight(fp.join('-'), fp.map(fp.toLower), fp.split(' '))
// Hello World ---> hello_world
/**
* Point Free
*
* , ,
* */
function f (world) {
return world.toLowerCase().replace(/\s+/g, '_')
}
/**
* Point Free
*
* , , ,
*
* :
*
* Point Free , ,
*
* */
const fp = require('lodash/fp')
// fp , ,
// : ---
// :
// :
const f = fp.flowRight(fp.replace(/\s+/g, '_'), fp.toLower)
fp.replace
console.log(f('Hello World'))
Point Free事例// world wild web ==> W. W. W
const fp = require('lodash/fp')
//
// const f = fp.flowRight(fp.join('. '), fp.map(fp.first), fp.map(fp.toUpper), fp.split(' '))
//
const f = fp.flowRight(fp.join('. '), fp.map(fp.flowRight(fp.first, fp.toUpper)), fp.split(' '))
console.log(f('world wild web'))