2017-12-05 5 views
0

私は常に3つの引数を受け取る関数を持っています。少なくとも1つの引数は値を持ちますが、1つ以上の引数は値を持ちません。この関数の引数で作業した後、値付きの引数だけを別の関数に送る必要があります。さらに、2番目の関数は少なくとも2つのargsを必要とするので、少なくとも2つのargsに値がある場合にのみ実行したい。これを達成する最良の方法は何ですか?ここで空ではない変数を関数のパラメータとして渡すだけですか?

は私のコード構造の例である:

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()、2

+0

どのように動作しますか? 2が値を持たない場合は 'doSomethingElse(arg1、arg3);'となります。 – epascarello

+0

空でない値の* arguments *リストをフィルタリングし、結果の配列を2番目の関数に適用します。 – Thomas

+0

@epascarelloはい – Nick765

答えて

1

の最小値と引数の任意の数を受け取ることができますが、第一のフィルタargumentsオブジェクトは、undefinedの値がないことを保証します。そこから、引数オブジェクト(spreadを介して)が2つ以上ある場合、次の関数に渡すことができます。

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);

0

あなたはrest operator使用することができます。これについて

function one(...args) { 
 
    console.log(args.length); 
 
    two(...args); 
 
} 
 

 
function two(...args) { 
 
    console.log(args.length); 
 
} 
 

 
one(1, 2, 3, 4);

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); 
    } 
} 
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; 

} 
+0

これをコメントの代わりに2つの可能性のあるES5とES6に分割するといいでしょう。 – ppovoski

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]); 
    } 
} 
関連する問題