web-dev-qa-db-ja.com

JavaScriptの2番目の引数のみを渡します

現在、関数の2番目の引数のみを渡す関数を作成しようとしています。いくつかのドキュメントを読みましたが、何も調べていません。

私はそれを作ります:

 function test (a,b){ ....};
    // pass only the second parameter 
    test( ... , b) ;

私の現在のアイデアは、次のように2番目の引数をde facto動的デフォルトパラメータとして渡すことです。

    var defaultVar = "something" ;

    function test (a,b = defaultVar){...}

次に、必要に応じてdefaultVar値を変更します。

var defaultVar = modification ; 

実際、私はGoogleドライブAPIに取り組んでおり、2番目のパラメーターに文字列値を入力してコールバックを作成しようとしています。このコールバックは、返されたファイルが実際に検索されたファイルであるかどうかを検証する役割を果たします(名前の値に対してブール検証を行うことにより)。

したがって、私にとってのアイデアは、名前を渡し、この方法でファイルデータを取得することにより、Googleドライブ上のファイルを取得するプロセスを自動化することです。

私の精度が役に立てば幸いです。

ここに私のquickstart.js:

(...Google authentication and all) ; 

 var filename = "";
// enter a filename in the function by the way of filename
function listFiles (auth, filename =  filename) {
  const drive = google.drive({version: 'v3', auth});
  drive.files.list({
    pageSize: 50,
    fields: 'nextPageToken, files(id, name)',
  }, (err, {data}) => {
    if (err) return console.log('The API returned an error: ' + err);
    const files = data.files;
    if (files.length) {
      console.log('Files:');
      files.map((file) => {
        console.log(`${file.name} (${file.id})`);

            // check if the file returns match the filename wished 
            displayFile(file);
              if(`${file.name}` == filename ){
                console.log("name found !")
                      const fileData = { name : `${file.name}`,
                                         id : `${file.id}`
                      }
         return fileData
        }

      });
    } else {
      console.log('No files found.');
    }
  });
}

listFiles(undefined, "test.md")

改善のアイデアがあれば歓迎します。

ありがとう

9
Webwoman

ES2015でdefault parameter valuesを追加すると、パラメーターのデフォルト値を宣言できます。呼び出しを行うときに、最初のパラメーターとしてundefinedを渡すと、デフォルトが取得されます。

function test(a = "ay", b = "bee") {
  console.log(`a = ${a}, b = ${b}`);
}
test();             // "a = ay, b = bee"
test(1);            // "a = 1, b = bee"
test(undefined, 2); // "a = ay, b = 2"
test(1, 2);         // "a = 1, b = 2"

undefinedをテストすることにより、ES2015より前の環境で手動で同様のことを手動で行うことができます。

function test(a, b) {
  if (a === undefined) {
    a = "ay";
  }
  if (b === undefined) {
    b = "bee";
  }
  console.log("a = " + a + ", b = " + b);
}
test();             // "a = ay, b = bee"
test(1);            // "a = 1, b = bee"
test(undefined, 2); // "a = ay, b = 2"
test(1, 2);         // "a = 1, b = 2"
10
T.J. Crowder

関数が取る引数の数を変更しても問題がない場合は、オブジェクトプロパティを介して引数を渡すことができます。次に、呼び出し中に指定するプロパティ(複数可)を呼び出し元に決定させることができます。

その他のプロパティは、関数のパラメーター指定でオブジェクトを分解することにより、デフォルト値を取ることができます。

function test({a = 1, b = 2}) {
    console.log(`a = ${a}, b = ${b}`);
};

test({b:42}); // only specify what b is
3
trincot