Lodash:每次通过最后的计算结果时,应用函数播种n次

时间:2017-09-14 11:12:54

标签: 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);

1 个答案:

答案 0 :(得分:1)

  

有时我需要像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会让它变得非常慢。如果您愿意,可以对其进行优化。