Эффективный способ написания повторяющихся инструкций

#javascript

#javascript

Вопрос:

Я хотел бы написать эту часть моего кода более эффективным способом.

Я понятия не имею, какой шаблон использовать в такой ситуации :

                 l.match(/meite/) amp;amp; (l = 'meite'   h);
                l.match(/rafael/) amp;amp; (l = 'rafael'   h);
                l.match(/maicon/) amp;amp; (l = 'maicon'   h);
                l.match(/player1(?:.|_)/) amp;amp; (l = 'player1'   h);
                l.match(/player2(?:.|_)/) amp;amp; (l = 'player2'   h);
                l.match(/player3(?:.|_)/) amp;amp; (l = 'player3'   h);
                l.match(/player4(?:.|_)/) amp;amp; (l = 'player4'   h);
                l.match(/player5(?:.|_)/) amp;amp; (l = 'player5'   h);
                l.match(/player6(?:.|_)/) amp;amp; (l = 'player6'   h);
                l.match(/player7(?:.|_)/) amp;amp; (l = 'player7'   h);
                l.match(/player8(?:.|_)/) amp;amp; (l = 'player8'   h);
  

Какова хорошая практика для такого случая?

Комментарии:

1. Вы могли бы использовать цикл

2. Что означает @GetOffMyLawn, так это то, что вы могли бы поместить аргументы в разделы l.match и l = в массив или другую структуру и выполнить итерацию по этой структуре, чтобы избежать перезаписи «l.match(» и » amp;amp; (l = » и » h);».

Ответ №1:

Вы могли бы использовать цикл для перебора каждой части.

 // The first set of items
['meite', 'rafael', 'maicon'].forEach(i => l.match(new RegExp(i)) amp;amp; (l = i   h))

// The second set of items
for(let i = 1; i < 9; i  ) {
  l.match(new RegExp(`player${i}(?:.|_)`) amp;amp; (l = 'player'   i   h);
}
  

Комментарии:

1. Вы могли бы даже создать массив строк, содержащий ‘meite’, ‘rafael, maicon, player1, player 2 и т.д. И выполнить цикл по всему массиву за один раз.

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

3. Вы могли бы повторить и первую часть, повторяя Array из ['meite', 'rafael', 'maicon'] .

4. @Raymond Я думаю, тот, кто проголосовал против тебя, заметил, что ты не использовал свою переменную цикла в своем коде внутри цикла. Вы оставили это как литерал «/meite/».

5. Я имею в виду, что я понимаю это, я понимаю. Но люди sometimes действительно быстро набрасываются на нового пользователя, пытающегося внести свой вклад.

Ответ №2:

Последнюю часть можно было бы выполнить с помощью одного регулярного выражения, фиксирующего номер игрока в группе.

 let m = l.match(/player([1-8])(?:.|_)/);
if (m) l = 'player'   m[1]   h;
  

Ответ №3:

Вы могли бы взять одно регулярное выражение и принять соответствующее значение.

 var match = l.match(/meite|rafael|maicon|(player[1-8](?:.|_))/);

if (match) l = match[0]   h;