Javascript 以函数样式(无变异、无循环)从值和函数生成列表

Javascript 以函数样式(无变异、无循环)从值和函数生成列表,javascript,Javascript,我如何编写一个函数来获取一个值并生成一个值列表 例如:value=2,函数将递增1直到达到一个条件(或者无限,我将从中获取/删除),预期结果应该如下所示:[3,4,5,6,7,8…] 现在我正在做一件丑陋的事情: let min = ...; const max = ....; const acc = [min]; while (min.plus(1). < max) { min = min.plus(1); acc.push(min); } let min=。。。; 常数ma

我如何编写一个函数来获取一个值并生成一个值列表

例如:value=
2
,函数将递增1直到达到一个条件(或者无限,我将从中获取/删除),预期结果应该如下所示:[3,4,5,6,7,8…]

现在我正在做一件丑陋的事情:

let min = ...;
const max = ....;
const acc = [min];

while (min.plus(1). < max) {
  min = min.plus(1);
  acc.push(min);
}
let min=。。。;
常数max=。。。。;
const acc=[min];
而(最小值加上(1)<最大值){
最小值=最小值加上(1);
加速推力(分钟);
}
奖金问题。。。。我如何用类型符号来表示它?会是:(a->[a])->a->[a]

谢谢

函数recursivePlus(最小值、最大值、集合){
function recursivePlus(min, max, collection) {
    if (!collection) {
        collection = [];
        collection.push(min);
        return recursivePlus(++min, max, collection);
    } else {
        if (min <= max) {
            collection.push(min);
            return recursivePlus(++min, max, collection);
        } else {
            return collection;
        }   
    }
}
recursivePlus(0, 3);
如果(!集合){ 集合=[]; 收集。推送(分钟); 返回recursivePlus(++min,max,collection); }否则{ 如果(min可能使用lodash范围

或者使用Array.apply(密集数组)方式:


我认为可以使用

const startDate = new Date("2019-10-16");
const endDate = new Date("2019-10-18");
const dayInMillis = 24 * 60 * 60 * 1000;
_.range(startDate.getTime(), endDate.getTime() + 1, dayInMillis);
// => [1571184000000, 1571270400000, 1571356800000]

我找到了我正在寻找的解决方案!即:
unfold
,它与
fold/reduce
相反,应该是这样的(请注意,我使用的是一个类似于下划线和lodash的js函数库Ramda.js):

const f=n=>
n、 toMillis()>maxDate.toMillis()?false:[n,n.plus({days:1})]
展开(f,minDate);

谢谢你们帮我,伙计们,谢谢


PS:我会留下这篇文章,以防万一有人感兴趣:

使用
reduce
和/或
map
。这些是函数式编程中的基本结构。实现预期结果而不使用循环的唯一方法是递归这是什么语言?没有
Array\plus
在JS中?这是我正在寻找的实用程序类型…然而,我手中的不是数字而是日期…基本上我需要通过应用一个函数来创建范围,该函数在最后处理的项目上添加一天。范围仅处理数字。
const startDate = new Date("2019-10-16");
const endDate = new Date("2019-10-18");
const dayInMillis = 24 * 60 * 60 * 1000;
_.range(startDate.getTime(), endDate.getTime() + 1, dayInMillis);
// => [1571184000000, 1571270400000, 1571356800000]