官方文档: https://ramdajs.com/docs/
链式操作,惊为天人,现在有 AI 来干活,感觉不是那么难写了
1
zhengfan2016 2 天前
|
2
lizy0329 OP @zhengfan2016 个人觉得比 lodash 强大 10000 倍
|
3
abc1310054026 2 天前
要比喻的话更像是链式 rxjs 。写的人爽了,维护的人不懂可就惨了
|
4
qs 2 天前 via iPhone
16 年的时候好像写游戏客户端的同事就用这个来着
当时就说很方便了 |
5
lizy0329 OP @abc1310054026 现在可以完全交给 AI 写,方便多了
|
6
justdoit123 1 天前 链式操作的场景其实没那么多。
倒是可以多借鉴一些函数的功能,对常用的 list (或者数组)、dict 等操作进行封装。 我写 python 看到满屏幕的 [x for x in yyy if ba la ba la] 都看麻了。 另外,要提醒。这种链式组合操作的性能其实不好。当然,大部分场景无需考虑。 但是,如果你在写一个很基础、会被高频调用的功能,这点性能损失可能就会被百倍千倍的放大。如果是这种场景,建议还是在一个 for 循环里,把要做的几个操作( filter 、map 、reduce 等)一次性全做了。 |
7
zaneliu 1 天前 当我们在讨论 Ramda 时,究竟在讨论什么?
不妨静下心来细想: 是 lodash 吗? 是 RxJS 吗? 是链式调用吗? 这些元素在 Ramda 中确实都有体现,但它们并非使用 Ramda 的真正理由,更不是其设计时的初衷。 可以看下 Ramda 官网第一行醒目的简介: > Ramda > A practical functional library for JavaScript programmers. 它声称自己是一个「实用的函数式( functional )」库。 没错,它是一个完全遵循函数式(不只是简简单单的柯里化、闭包)的、彻底拥抱函数式思想的工具库。 所以如果想真正用好 Ramda ,可以先从学习「函数式思想」开始。 此处不展开,推荐一篇网易云大前端博文: https://musicfe.com/javascript-functional-programming-quickstart/ 函数式编程确实优雅、简洁,很多人初次接触也「惊为天人」,但软件开发没有银弹,我们追求的是**在合适的场景,用合适的技术,更高效地解决问题**。 请勿陷入“为了用 Ramda 而用 Ramda”的误区。 |
9
encounter2017 6 小时 23 分钟前 简单看了下,没理解为啥要弄出来一个 addIndex 后,还要弄一个 addIndexRight, 作为一个“函数式”的库,不应该直接用 map 来实现吗?而且 add 和 addIndex 听起来就有歧义,为啥前者直接就是算数加法,后者就是添加成一个 tuple ?
const arr = ["a", "b", "c"]; const res = Array.from(arr.entries()).map(([i, v]) => [v, i + 1]); |
10
lizy0329 OP @encounter2017 因为 Ramda 是函数式的工具,是柯里化,可组合,链式的,所以必须让每个函数的计算非常存粹,所以 R.map 他只返回 value ,要变成原生的 map 必须 const mapNative = R.addIndex(R.map);
所以会有三种不同的创建 map 方法: ['f', 'o', 'o', 'b', 'a', 'r'] 正:R.addIndex(R.map) // ['0-f', '1-o', '2-o', '3-b', '4-a', '5-r'] 正逆:R.addIndexRight(R.map) // ['5-f', '4-o', '3-o', '2-b', '1-a', '0-r'] 逆:R.addIndexRight((fn, ary) => R.map(fn, R.reverse(ary))) // ['5-r', '4-a', '3-b', '2-o', '1-o', '0-f'] 至于 add 和 addIndex 听起来就有歧义,应该是函数式那些作者定义的 |
11
nzbin 3 小时 54 分钟前
@zaneliu #7
看完之后,我反倒觉得 rxjs 更能体现“流水线”这种思想 https://rxjs.tech/guide/overview fromEvent(document, 'click') .pipe( throttleTime(1000), map((event) => event.clientX), scan((count, clientX) => count + clientX, 0) ) .subscribe((count) => console.log(count)); |
12
zaneliu 1 小时 48 分钟前
@xuyihao 我可以理解是在夸我吗哈哈哈哈~
我之前也在公司做过一次「函数式编程的分享」,正好看到这个帖子,结合我自己的理解有感而发,并不是 AI 生成的哈~ https://cdn.zaneliu.me/2025/10/GoOpSE.jpg |