【问题标题】:Explode array elements into comma-separated arguments (Node.js)将数组元素分解为逗号分隔的参数 (Node.js)
【发布时间】:2012-04-08 14:07:43
【问题描述】:

假设我有一个接受任意数量参数的函数(最后一个是回调):

xxx.create ('arg1', 'arg2', ..., 'arg10', callback) {
    ...
}

但这很丑。我希望能够提取前几个参数并执行以下操作:

var args = ['arg1', 'arg2', ..., 'arg10']
xxx.create (args.explode(), callback) {
    ...
}

当然我可以为xxx.create() 写一个包装器,但我希望它是干净的。

谢谢。

【问题讨论】:

    标签: javascript arrays node.js arguments


    【解决方案1】:

    您正在寻找Function.apply

    var args = ['arg1', 'arg2', ..., 'argN'];
    xxx.create.apply(xxx, args.concat(callback)) {
        // ...
    }
    

    我使用了Array.concat,以免改变原始的args 数组。如果这不是问题,以下任何一种都足够:

    var args = ['arg1', 'arg2', ..., 'argN', callback];
    xxx.create.apply(xxx, args) {
        // ...
    }
    
    // or
    
    var args = ['arg1', 'arg2', ..., 'argN'];
    args.push(callback);
    xxx.create.apply(xxx, args) {
        // ...
    }
    

    现在,如果您想使用包装器而不是公开 Function.apply 调用:

    function create_wrapper() {
        xxx.create(xxx, arguments);
    }
    
    // then
    
    create_wrapper('arg1', 'arg2', ..., 'argN', callback);
    

    会做的。

    【讨论】:

      【解决方案2】:

      本地的arguments 变量可以在这里提供帮助:

      foo = function(){
        // convert local 'arguments' object to array ...
        argsArray = Array.prototype.slice.call(arguments);
      
        // pop the callback off
        callback = argsArray.pop();
      
        // the callback alerts the remaining, variable-length arguments list
        callback(argsArray);
      };
      

      这是 jsfiddle:http://jsfiddle.net/K38YR/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-30
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-14
        • 2019-07-07
        • 2021-02-24
        相关资源
        最近更新 更多