@kavalorn123

Почему Array.forEach не видит первый аргумент?

regExSearch : function(searchString, name) {
    var separatedItem = name.toLowerCase().split(' ');
    var result;
    separatedItem.forEach(function(item) {
      var re = new RegExp("^" + searchString);
      result = re.test(item);
      if (result) return;
    });
    return result;
  },


В searchString строка "яро", в name строка "Ярослав Иванович"; проблема в том что в коллбеке форича первый аргумент выбивает ReferenceError: item is not defined. В чем может быть проблема?
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Никаких ошибок, приведённый код прекрасно работает:
5a9d27e1e82c0878806808.png

Логика, правда, страдает - строка if (result) return; бессмысленна - функция в любом случае будет прервана. А result, скорее всего, не должен перезаписываться когда строка не соответствует регулярке (в результате на строки 'Ярослав' и 'Иван Ярославович' функция возвращает true, а на 'Ярослав Иванович' false).

Вообще, весь код можно сократить до такого:
function regExSearch(searchString, name) {
    var re = new RegExp("^" + searchString);
    var words = name.toLowerCase().split(' ');
    return !!words.find((item) => re.test(item));
}


Или даже такого (зависит от того, насколько старые браузеры в поддержке):
function regExSearch(searchString, name) {
    var words = name.toLowerCase().split(' ');
    return !!words.find((item) => item.startsWith(searchString));
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы