我知道我们可以在函数中的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]);
},
答案 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]