Могу ли я просто поменять Includes на Indexof в Javascript?

#javascript

#javascript

Вопрос:

Я пытаюсь отладить несовместимость JS с IE11:

Объект не поддерживает свойство или метод ‘includes’

Я читал, что это includes можно легко заменить на indexof . Однако, поскольку у меня очень ограниченные знания JS, я не уверен, что это единственное изменение, которое мне нужно здесь внести… Или другие части тоже потребуют перезаписи?

Оригинал

 if (el.method_title.includes('|')){
    el.timeslot = el.method_title.split('|')[1].trim();
    el.method_title = el.method_title.split('|')[0].trim();
}
  

Предложение

 if (el.method_title.indexOf('|')){
  

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

1. includes() возвращает логическое значение, indexOf() возвращает число. Вам нужно изменить функцию if, чтобы отразить это: if (el.method_title.indexof('|') > -1)

2. .trim также может потребоваться перезапись, когда .includes не поддерживается ни в одной из ваших целевых сред

3. Я только что реализовал решение от @Strelok, и это именно та ошибка, которую я не получил. Изучаю это сейчас.

4. Возможно, вы захотите установить полизаполнение вместо того, чтобы переписывать весь свой код.

Ответ №1:

Вызывается метод, indexOf который вернет -1 , если подстрока не найдена в вашей строке, поэтому вам следует выполнить сравнение:

 if (el.method_title.indexOf('|') >= 0)
  

indexOf() Метод возвращает позицию первого вхождения указанного значения в строке.

Этот метод возвращает, -1 если значение для поиска никогда не встречается.

Примечание: Метод indexOf () чувствителен к регистру.

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

1. Все в JavaScript чувствительно к регистру 🙂

Ответ №2:

Я бы рекомендовал вообще не тестировать строку с помощью includes / indexOf — просто split ее и проверить результат:

 var parts = el.method_title.split('|'); // might want to pass a limit as well
if (parts.length > 1) {
    el.timeslot = parts[1].trim();
    el.method_title = parts[0].trim();
}
  

Проще и эффективнее.