javascript只获得函数内的参数作为参数

时间:2015-11-27 11:30:12

标签: javascript

我知道我们可以在函数中的javascript中获取所有参数。我们可以得到额外的论点,我们也没有问过。 但是我们能得到关于javascript函数的问题吗? 喜欢:

function a(a,b){
 console.log(arguments);
}

如果我们将函数调用到某处a(1,2,3,4,5) 那么输出就像[1,2,3,4,5]

但我只想要[1,2],因为我预计功能上只有两个参数?

我的条件是

    index: (req, res, next) => {
            var params =  ['batch_id', 'section_id', 'subject_id', 'term', 'assesment_id', 'assesment_type'];
            var _ = req._;
            req.utils.requestValidation([req,res,next], params,'query')
// But i dont want to send params like above always instead like below
 req.utils.requestValidation(arguments, params,'query')

以及它被调用的地方是

requestValidation: (data, options, param) => {
        if (!options) return;
        var _ = data[0]._ || data._;
        var rules = {};

        var data = {};
        var sanity = {};
        var elr = [validator.escape, validator.ltrim, validator.rtrim];
        options.map((item, index) => {
            rules[item] = 'required';
            sanity[item] = elr;
        });
        data[param] = sanity;
        if (typeof data != 'string') {
            sanitizer.setOptions(data);
            var data = sanitizer.sanitize(data[0], data[1], data[2],param);
            return data[0].validation.validate(rules, data[0][param]);
        }
        return data.validation.validate(rules, data[param]);
    },

3 个答案:

答案 0 :(得分:2)

如果您只需要两个参数,只需将arguments剪切为两个项目

如果你想要自动,你可以编写函数包装器,如下所示:

function wrapperCutParams(func, paramsCount){
  return function(){
    var args = Array.prototype.slice(arguments, 0);
    if(args.length > paramsCount){
      args = args.slice(0, paramsCount)
    }
    func.apply(this, args)
  }
}

然后

var a = function a(a,b){
 console.log(arguments);
}

a = wrapperCutParams(a, 2)

或者只是

a = wrapperCutParams(function a(a,b){
     console.log(arguments);
    }, 2)

答案 1 :(得分:1)

由于您声明这些参数的最可读方式是按原样使用它们,如果需要将它们放在数组中,只需执行此操作即可。

myArgs = [a, b];

答案 2 :(得分:1)

编写一个高阶函数,它将底层函数作为参数,并返回一个函数,该函数根据函数length属性将参数列表截断为函数所要求的参数个数。

function slice_args(fn) {
  return function() {
    return fn.apply(this, Array.prototype.slice.call(arguments, 0, fn.length));
  };
}

然后

function a(a,b){
  console.log(arguments);
}

var b = slice_args(a);

b(1,2,3,4,5)
> [1, 2]