javascript - Lodash:每次传递最后一个计算结果时,将函数应用于种子n次

标签 javascript functional-programming lodash

是否有优雅的 lodash 方式将函数应用于种子 n 次,例如

let start = 100, n = 3, multiplier = 1.2;

let predictions = _
  .range(1, 1 + n)
  .map(i => start * Math.pow(multiplier, i));

// => [120,144,172.8]

以更实用的方式,例如

let predictions = _
  .times(n)
  .something(curr => curr  * multiplier, /*seed*/ start);

最佳答案

sometimes I need something like half-map/half-reduce

您正在寻找类似 iterate 的内容。据我所知,lodash没有这个功能。下一个最好的办法是使用 _.mixin 自己定义它如下:

_.mixin({
    iterate: (n, f, x) =>
        _.reduce(_.times(n), arr => _.concat(arr, f(_.last(arr))), [x])
});

现在,您可以按如下方式使用它:

let predictions = _
    .iterate(n, curr => curr * multiplier, start)
    .slice(1); // remove the start element

这不是最好的解决方案。使用_.concat让它真的很慢。如果您愿意,可以对其进行优化。

关于javascript - Lodash:每次传递最后一个计算结果时,将函数应用于种子n次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46217583/

相关文章:

javascript - 根据给定条件创建嵌套的 json 对象

javascript - 如何使用 lodash 合并/连接对象数组中相同对象属性的值?

javascript - 在 HTTP 仍在进行时进行过滤 Angular

javascript - 动态获取选中输入的值并使用 AJAX 发送

kotlin - Kotlin FP:将List <String>转换为Map <String,Int>

应用于对象的 C++ 成员函数

javascript - 打印功能在网站中的实现

javascript - 开始使用 JQuery 下载文件

java - 如何使用 lambda 表达式创建 'getter'

node.js - 由于 lodash@3.3.1 依赖问题,Keystonejs 安装失败