Используйте для l oop для массива, обеспечивающего ошибку - PullRequest
2 голосов
/ 04 августа 2020

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

ESLint: итераторы / генераторы требуют среды выполнения регенератора, что слишком тяжело для этого руководства, чтобы разрешить их. Отдельно следует избегать циклов в пользу итераций массива. (синтаксис без ограничений)

Это код

for (const subscription of resp.data.subscriptions) {
  if (subscription.url) {
    return subscription.url;
  }
}

Код просто

  • получить массив данных из другой функции
  • l oop для каждого элемента массива
  • когда первый экземпляр массива имеет URL-адрес, принимает его и возвращает

Есть ли способ лучше написать, чтобы избежать проблемы с eslint?

Ответы [ 2 ]

2 голосов
/ 04 августа 2020

Идут споры о for...of использовании здесь и его возможном ограничении

for(let i = 0; i < array.length; i ++) { ... } - устаревший синтаксис, и хотя я знаю, что все понимают, что это означает, мы следует оставить это позади.

array.map имеет функциональную коннотацию, и мы не должны вызывать побочных эффектов при закрытии.

array.forEach - вариант, но лично я не нравится это для такого рода императивной работы.

Поэтому я думаю, что ForOfStatement следует удалить из ограниченного синтаксиса по указанным выше причинам - кто-нибудь с какими-либо конфликтующими точками зрения? Знаем ли мы, каково исходное обоснование?

for..of дороже, чем forEach, проверьте это out

У меня нет мнения, вы можно просто удалить правило eslint

1 голос
/ 04 августа 2020

Вы можете использовать .filter, чтобы решить эту проблему:

var arrObjWithURL = resp.data.subscriptions.filter(function(item) {
    return item.url;
});

if (arrObjWithURL.length > 0) {
    return arrObjWithURL[0];
}

Вы также можете использовать .find:

return resp.data.subscriptions.find(function(item) {
    return item.url;
});

... или это, чтобы продолжить, если URL не найден:

const objWithUrl = resp.data.subscriptions.find(function(item) {
    return item.url;
});

if (objWithUrl !== undefined) {
    return objWithUrl;
}

демонстрация на jsfiddle. net

...