Передайте только второй аргумент в javascript

Я пытаюсь создать функцию, в которой я передаю только аргумент второй моей функции.

Я бы хотел, чтобы это работало так:

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

Моя текущая идея - передать второй аргумент как динамический параметр по умолчанию де-факто следующим образом:

var defaultVar = "something";
    
function test (a, b=defaultVar) {
    // ...
}

... затем измените значение defaultVar в соответствии с моими потребностями.

var defaultVar = modification; 

Фактически, я использую API-интерфейс Google Drive, и я пытаюсь сделать его таким, чтобы я мог ввести строковое значение для второго параметра, чтобы выполнить обратный вызов. Этот обратный вызов будет выполнять роль проверки, действительно ли возвращаемый файл является файлом, в котором выполняется поиск (путем выполнения логической проверки значения имени).

Следовательно, для меня идея состоит в том, чтобы автоматизировать процесс получения файла на диске 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.info('The API returned an error: ' + err);
    const files = data.files;
    if (files.length) {
      console.info('Files:');
      files.map((file) => {
        console.info(`${file.name} (${file.id})`);

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

listFiles(undefined, "test.md")

Любые идеи по улучшению приветствуются.

Привет! Боюсь, совсем не понятно, о чем вы здесь спрашиваете. Обновите свой вопрос, добавив минимальный воспроизводимый пример, демонстрирующий проблему, в идеале работоспособный, используя Stack Snippets (кнопка панели инструментов [<>]; вот как это сделать).

T.J. Crowder 28.05.2018 17:14

Вы не можете передать два аргумента функции, не передав какое-либо значение в качестве первого аргумента.

Pointy 28.05.2018 17:14

можно использовать bind или call ?, может пригодиться developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

Juan Caicedo 28.05.2018 17:15

Может test(b)?

yunandtidus 28.05.2018 17:19

спасибо всем за ваши полезные и даже быстрые ответы, я завершил свой вопрос, надеюсь, моя точность будет полезна, а пока я проверю ваши предложения.

Webwoman 28.05.2018 17:32
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
18
5
16 171
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

С добавлением значения параметров по умолчанию в ES2015 вы можете объявить значения по умолчанию для параметров, и при выполнении вызова, если вы передадите undefined в качестве первого параметра, он получит значение по умолчанию:

function test(a = "ay", b = "bee") {
  console.info(`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"

Вы можете сделать что-то подобное вручную в среде до ES2015, проверив undefined:

function test(a, b) {
  if (a === undefined) {
    a = "ay";
  }
  if (b === undefined) {
    b = "bee";
  }
  console.info("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"

... если это то, о чем вы спрашиваете. :-)

T.J. Crowder 28.05.2018 17:17

спасибо T.J. Краудер, я думаю, со всем этим все будет в порядке, я думаю, наконец, я был очень близок к ответу, который ищу. Единственное, что мне осталось сделать, это изменить значение имени файла в соответствии с body.req.name. Спасибо

Webwoman 28.05.2018 18:07

Если вы согласны с изменением количества аргументов, которые принимает ваша функция, вы можете передать аргументы через свойства объекта. Затем вы можете позволить вызывающей стороне решить, какое свойство (или свойства) указать во время вызова.

Другие свойства могут принимать значения по умолчанию посредством деструктуризации объекта в спецификации параметра функции:

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

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

Замечательный ответ! Ваш ответ должен быть принятым!

Manuel Abascal 30.09.2019 07:54

Другие вопросы по теме