如何只将非空变量作为函数参数传递?

时间:2017-12-05 20:28:08

标签: javascript function arguments

我有一个总能收到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个。

5 个答案:

答案 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]);
    }
}