tslint: предпочитаемое значение для ожидаемого цикла 'for-of' вместо цикла 'for' - PullRequest
0 голосов
/ 12 июня 2018

Я получаю эту ошибку tslint:

prefer-for-of  Expected a 'for-of' loop instead of a 'for' loop with this simple iteration

код:

function collectItems(options) {
    const selected = [];
    for (let i = 0; i < options.length; i++) {
      const each = options[i];
      if (each.selected) {
        selected.push(each.label);
      }
    }
    return selected;
  }

Может ли кто-нибудь помочь мне понять и устранить эту ошибку?Я знаю, что ответ на этот вопрос, но это не помогает в моей ситуации.

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Вы можете использовать for-of, который перебирает элементы массива, чтобы избежать предупреждения ts-lint:

function collectItems(options) {
    const selected = [];
    for (const each of options) {
        if (each.selected) {
            selected.push(each.label);
        }
    }
    return selected;
}

Или вы можете использовать один слой для фильтрации массива:

const selected = options.filter(e=> e.selected).map(e=> e.label);
0 голосов
/ 12 июня 2018

for-of гораздо более кратко и не требует ручной итерации.ЛИНТЕР рекомендует вместо этого написать что-то подобное для удобства чтения:

function collectItems(options) {
  const selected = [];
  for (const each of options) {
    if (each.selected) {
      selected.push(each.label);
    }
  }
  return selected;
}

Но было бы еще лучше использовать reduce в этой ситуации:

const collectItems = options => options.reduce((selectedLabels, { selected, label }) => {
  if (selected) selectedLabels.push(label)
  return selectedLabels;
}, []);

(Вы также можете использовать filter с последующим map, но для этого необходимо выполнить итерацию по массиву дважды, а не один раз)

...