1

合成関数と純粋関数の両方に頭を悩ませようとしています。

データが混在するオブジェクトがあります。いくつかの値では、次のことが必要です。

  1. 値の単位を削除します
  2. 文字列を解析して整数に
  3. 値を 10 進数に変換する

私は 3 つの関数を書きましたが、それらは 1 つのことしか実行しないという意味でそれらを純粋にしようとしていますが、厳密に言えば、それらは状態を変化させています。ただし、状態の変更を回避する方法がわかりません。これが技術的に純粋な関数ではない場合はどうすればよいですか?

私の3つの「純粋な」関数は次のとおりです。

function parseValue(val) {
    return typeof val === 'number' ? val : parseInt(val)
}

function stripUnits(val) {
    return typeof val === 'string' ? val.match(/\d+/)[0] : val
}

function convertToDecimal(val) {
    return val / 100
}

次に、 lodashを使用してこれらの関数を 1 つの関数に構成しようとしています。 compose()

function prepValue(val) {
    return compose(stripUnits, parseValue, convertToDecimal)
}

これを実行しようとするとconsole.log("prepValue", prepValue(weather.current.temperature))、ターミナルに次のように表示されます。

prepValue function (){var n=arguments,e=n[0];if(o&&1==n.length&&of(e))return o.plant(e).value();for(var u=0,n=r?t[u].apply(this,n):e;++u<r;)n=t[u].call(this,n);return n}

ですから、主なものは、

  1. 3 つの関数を「純粋」にするにはどうすればよいですか
  2. これらの関数を1に構成するにはどうすればよいですか
4

2 に答える 2