javascript - 使用纯函数创建组合函数

标签 javascript functional-programming pure-function

我正在努力了解码合函数和纯函数。

我有一个包含混合数据的对象。在某些值(value)观上,我需要:

  1. 删除值的单位
  2. 将字符串解析为整数
  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 的帮助下将这些函数组合成一个函数撰写()

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. 如何使我的三个函数“纯粹”
  2. 如何将这些函数组合成 1

最佳答案

您犯的唯一错误是没有以 val 作为参数调用生成的组合方法:

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

关于javascript - 使用纯函数创建组合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49275375/

相关文章:

javascript - 使用 AJAX 发送多个数据

c++ - "Member is private"虽然我不从外部访问它,但在使用尾随返回类型时

scala - scala 中的二维尾递归

scala - 使用功能方式处理日志消息的最佳实践是什么

javascript - 如何使用 jQuery 对选定的 html 选择元素进行计数

javascript - 当值与使用 jquery 的任何 div 项目不匹配时显示消息无搜索结果

javascript - "To Be or Not to Be"关于 JavaScript 中的变量

java - 是否有与 Java 8 Stream 限制函数等效的 Kotlin 函数

javascript - 我可以在 TypeScript 中将函数限制为纯函数吗?

d - 这个纯函数如何能够修改非私有(private)状态?