tslint:prefer-for-of期望'for-of'循环而不是'for'循环

时间:2018-06-12 06:22:22

标签: javascript typescript for-loop tslint

我收到了这个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;
  }

有人可以帮我理解并解决这个错误吗? 我知道这个问题有一个answer,但这对我的情况没有帮助。

2 个答案:

答案 0 :(得分:4)

您可以使用迭代数组元素的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);

答案 1 :(得分:2)

for-of更简洁,不需要手动迭代。为了便于阅读,linter建议你写这样的东西:

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,但这需要迭代数组两次而不是一次)