我有一个总能收到3个参数的函数;至少有一个arg会有一个值,但是一个或多个arg可能没有。使用此函数中的参数后,我只需要将带有值的参数发送到另一个函数。此外,第二个函数至少需要2个args,所以我只想在我的args中至少有2个具有值的情况下执行它。实现这一目标的最佳方法是什么?
以下是我的代码结构示例:
function doSomething(arg1, arg2, arg3) {
// Do something with args
// Only want to send args with values to this function (min 2 args)
return doSomethingElse(arg1, arg2, arg3);
}
编辑第二个函数doSomethingElse()
可以接收任意数量的args,最少为2个。
答案 0 :(得分:2)
您可以将apply()
与数组一起使用,以便传递所需的内容。
function doSomething() {
// convert the arguments to an array
var args = Array.from(arguments);
// var args = [...arguments]; // or use spread operator
// filter the array with only thing that are not undefined (change your check)
var argsWithValues = args.filter(function (item) { return item !== undefined })
// const argsWithValues = args.filter(item = > item !== undefined)
// call function if there are 2 items or more
return argsWithValues.length > 1 ? doSomethingElse.apply(this, argsWithValues) : null;
}
答案 1 :(得分:1)
首先过滤arguments
对象,以确保没有undefined
个值。从那里你可以将arguments对象(通过spread
)传递给下一个函数(如果有两个或更多)。
function doSomething(arg1, arg2, arg3) {
const totalArgs = [...arguments].filter(arg => arg !== undefined);
if (totalArgs.length >= 2) {
return doSomethingElse(...totalArgs);
} else {
console.log('Not enough arguments supplied');
}
}
function doSomethingElse() {
Array.from(arguments).forEach(arg => console.log(arg));
}
// doSomethingElse() fires
doSomething(1,2);
// doSomethingElse() doesn't fire. Not enough arguments.
doSomething(1);

答案 2 :(得分:0)
您可以使用rest operator:
function one(...args) {
console.log(args.length);
two(...args);
}
function two(...args) {
console.log(args.length);
}
one(1, 2, 3, 4);

答案 3 :(得分:0)
这个怎么样?
function doSomething(arg1, arg2, arg3) {
// Do something with args
// Only want to send args with values to this function (min 2 args)
if ([arg1, arg2, arg3].filter(arg => null != arg).length >= 2) {
return doSomethingElse(arg1, arg2, arg3);
}
}
答案 4 :(得分:0)
我希望能帮到你。
function doSomething() {
// Do something with args
if(arguments.length==0){
console.error("this function should have a param");return;
}
var args = [];
for (var i = 0; i < arguments.length; i++) {
console.log("argument number " + i + " : " + arguments[i]); args.push(arguments[i]);
}
// Only want to send args with values to this function (min 2 args)
return doSomethingElse(args);
}
function doSomethingElse(){
for (var i = 0; i < arguments.length; i++) {
console.log("argument number " + i + " : " + arguments[i]);
}
}