Лучший способ суммировать много последовательных, если (x typeof! == 'unedfined') запросов? - PullRequest
1 голос
/ 21 июня 2019

Я пишу тестовые сценарии с использованием JavaScript и Selenium и хочу запросить, если задан необязательный параметр, если да, то использовать их, если нет, пропустить их.

/*optional parameter are: day, month, year, comment*/

if( typeof day !== 'undefined') {
entryField.sendKeys(day);
}

if( typeof year!== 'undefined') {
entryField.sendKeys(year);
}

if( typeof month!== 'undefined') {
entryField.sendKeys(month);
}

if( typeof comment !== 'undefined') {
entryField.sendKeys(comment);
}

Это выглядит очень некрасиво.Есть ли лучший способ сделать это?Параметр задается извне, поэтому, если я не делаю этот тип запроса, возникает ошибка ссылки, поскольку они не определены.

Ответы [ 3 ]

1 голос
/ 21 июня 2019

Сложная часть, я полагаю, состоит в том, что переменная day и т. Д. Может даже не существовать до этой части кода.Поэтому, чтобы избежать ошибок, одним из возможных способов является использование eval, например:

var para = ["day", "year", "month", "comment"];
for(let p of para) {
    if(eval("typeof "+p) !== 'undefined') {
        entryField.sendKeys(eval(p));
    }
}
0 голосов
/ 21 июня 2019

Я бы просто использовал параметр отдыха, поэтому вместо fn(day, year, month, comment) я бы сделал:

   function fn(...keys) {
     keys.filter(it => it !== undefined)
       .forEach(it => entryField.sendKeys(it));
   }
0 голосов
/ 21 июня 2019

Вы можете использовать forEach с массивом действий для более удобочитаемого подхода:

var actions = [day, year, month, comment]

actions.forEach(action => {
  if (typeof action !== 'undefined') {
    entryField.sendKeys(action);
  }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...