Методы массивов и строк в JavaScript
В JavaScript (ES5) для работы с массивами и строками доступен богатый набор методов. Важно понимать, какие методы изменяют исходные данные (мутабельные), а какие возвращают новое значение (немутирующие), чтобы избегать скрытых ошибок и побочных эффектов.
База: массивы и строки
Массив — упорядоченная коллекция значений с индексацией с нуля, размер в свойстве length
. Элементы можно изменять по индексу.
Строка — последовательность символов в UTF-16. Строки немутируемые: любые «изменяющие» операции возвращают новую строку.
Как отличать мутабельные и немутирующие методы
У массивов мутабельные:
push
,pop
,shift
,unshift
,splice
,sort
,reverse
.У массивов немутирующие:
slice
,concat
,map
,filter
,reduce
/reduceRight
,every
,some
,indexOf
/lastIndexOf
,join
,forEach
(не меняет сам массив, если не делать этого явно).У строк все методы возвращают новую строку:
slice
,substring
,substr
,toUpperCase
/toLowerCase
,trim
,replace
,split
и др.
Массивы: мутабельные методы (изменяют исходный массив)
push(value1, ...)
— добавить в конец, вернуть новую длину.pop()
— удалить последний элемент, вернуть удалённый.unshift(value1, ...)
— добавить в начало, вернуть новую длину.shift()
— удалить первый элемент, вернуть удалённый.splice(start, deleteCount, item1, ...)
— удалить/вставить по индексу.sort(compareFn)
— сортировать по месту.reverse()
— развернуть порядок элементов.
Массивы: немутирующие методы (возвращают новый результат)
slice(begin, end)
— диапазон [begin, end), поддерживает отрицательные индексы; без аргументов — поверхностная копия.concat(valueOrArray, ...)
— склеивает, возвращает новый массив.indexOf(value, fromIndex)
/lastIndexOf(value, fromIndex)
— поиск, возвращает индекс или-1
.join(separator)
— массив → строка с разделителем.
Перебор массивов и свёртка (ES5)
forEach(callback, thisArg)
— перебрать элементы ради побочных эффектов.map(callback, thisArg)
— преобразовать каждый элемент, вернуть новый массив.filter(callback, thisArg)
— оставить элементы, где предикат вернулtrue
.every(callback, thisArg)
— проверка «все соответствуют условию».some(callback, thisArg)
— проверка «хотя бы один соответствует».reduce(callback, initialValue)
/reduceRight(...)
— свёртка к одному значению через аккумулятор.
Строки: поиск и извлечение
indexOf(substr, fromIndex)
/lastIndexOf(substr, fromIndex)
— поиск подстроки, регистр учитывается.slice(begin, end)
— подстрока [begin, end), поддерживает отрицательные индексы.substring(begin, end)
— подстрока, отрицательные считаются как 0; если begin > end — аргументы меняются местами.substr(start, length)
— подстрока по старту и длине (доступно в ES5).charAt(index)
/charCodeAt(index)
— символ и его код (0–65535).
Строки: преобразование, замена и разбиение
toUpperCase()
/toLowerCase()
— изменение регистра (возвращают новую строку).trim()
— удаляет пробелы по краям.replace(search, replacement)
— заменяет первое вхождение; для глобальной замены используйте регулярное выражение с флагомg
.split(separator, limit)
— разбивает строку в массив по разделителю.
Массивы ↔ строки: конвертация
split()
превращает строку в массив, а join()
— массив в строку. Следите за выбранным разделителем, чтобы корректно собирать/разбирать данные.
Практические рецепты (ES5)
Удалить дубликаты простым способом:
Безопасная сортировка чисел:
Сумма значений через reduce (с начальными значениями):