javascript - 链式数组创建者

标签 javascript arrays functional-programming

只是为了好玩,我正在寻找一种方法来创建具有以下行为的函数数组:

array()       // []
array(2)      // ugly function thing
array(2)()    // [2]
array(2)(3)() // [2,3] etc

我能到达的最接近的是

function array(x) {
    if (x == null)
        return []
    return function() {
        // same as above?!
        // I don't want some inelegant solution involving a lot of additional parameters
    }
}

ECMA5 有办法做到这一点吗?如果不是,请证明语法无法容纳这样的函数。

最佳答案

是的,“同上”。这是通过“递归”1 调用解决的:

function makeArrayAppender(arr) {
    return function array() {
        var args = Array.prototype.slice.call(arguments);
        if (!args.length)
            return arr;
        else
            return makeArrayAppender(arr.concat(args));
    };
}
var array = makeArrayAppender([]);

1:由于该函数是从返回的“thunk”函数调用的,而不是从调用本身调用的,因此它并不是真正的递归。它更像是尾部调用优化的函数,连续手动调用而不填充堆栈

关于javascript - 链式数组创建者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27262616/

相关文章:

javascript - R2D3 的 QUnit 测试开箱即用失败 - 我做错了什么?

javascript - 动态更新 VivaGraph JS

c - 预定义 C 数组

scala - 函数式 scala-如何避免可选映射上的深度嵌套

javascript - 在javascript中将字符串转换为二维数组

javascript - 回调内部的可见性

c - 如何将数组的值设置为单个变量

arrays - 使用数组索引中的变量输出 $Error

c++ - 是否有一个仿函数取消引用(智能)指针,向上转换它,然后调用它的方法?

javascript - 这个Ramda.js数据转换能改进吗?