Узнайте о самых популярных методах перебора строк в JavaScript.

Для многих вещей в JavaScript нет единого способа их достижения. Одна из них - такая простая вещь, как перебор каждого символа в строке. Давайте рассмотрим некоторые методы и обсудим их достоинства и недостатки.

Обратите внимание, что эта статья также доступна как интерактивный CodePled.

Прежде чем мы начнем, нам нужно вернуться к гораздо более основному вопросу.

Как получить доступ к одному символу строки

В настоящее время с ECMAScript 2015 (ES6) есть два способа доступа к одному символу:

charAt ()

Этот метод строкового объекта существует уже некоторое время и может рассматриваться как классический подход. Поддерживается даже в самых старых браузерах.

Обозначение скобок

Второй метод - это доступ к символу через скобки:

Этот подход был введен в ECMAScript 2015 и кажется более удобным. Кроме того, он позволяет рассматривать строку как структуру, подобную массиву. Это позволяет использовать несколько итерационных методов, как мы скоро увидим.

Какой метод предпочтительнее?

Обратной стороной charAt() может быть удобочитаемость. Однако он совместим со старыми браузерами, такими как IE7. Еще один аргумент против использования скобок - их нельзя использовать для присвоения символа:

Это может сбивать с толку, особенно потому, что предупреждения не будет.

На мой взгляд, скобки удобнее писать и читать. Проблемы совместимости следует решать путем транспиляции вместо неиспользования желаемой функции.

Популярные способы перебора строк

Следующий список методов не претендует на полноту. Он покажет некоторые из наиболее часто используемых подходов.

Чтобы продемонстрировать обработку отдельных символов нашей строки, мы будем использовать следующую функцию:

для цикла

Классический подход - простой for цикл:

Хотя это немного неудобно писать и читать, это самый быстрый из известных методов.

для… из

Этот оператор был введен в ECMAScript 2015 и может использоваться с итерируемыми объектами. Если вам не важен текущий индекс в теле цикла, это удобнее писать, чем классический for цикл.

для каждого()

Это функциональная версия цикла for. Многие люди предпочитают его for…of и for циклам, потому что это функция высшего порядка, и она помогает придерживаться стиля программирования, который использует неизменяемость (см. Руководство по стилю Airbnb в ссылках).

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

Заключение

Как и в случае со многими другими методами в JavaScript, выбор того, какой из них использовать, в основном вопрос вкуса. Однако следует помнить о влиянии на скорость преобразования строки в массив, а также о проблемах совместимости нотации скобок.

Я советую вам выбрать наиболее удобочитаемую технику и заботиться об оптимизации скорости только в том случае, если у вас есть проблемы с производительностью, и решать проблемы совместимости с помощью транспиляции.

использованная литература