Backend Typescript 1.0.0 Help

Методы массивов и строк в 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() — развернуть порядок элементов.

var a = [3, 1, 2]; a.push(4); console.log(a); // [3, 1, 2, 4] a.splice(1, 1, "x"); console.log(a); // [3, "x", 2, 4] var b = [10, 2, 5]; b.sort(); // лексикографическая сортировка как строк console.log(b); // [10, 2, 5] b.sort(function (x, y) { return x - y; }); console.log(b); // [2, 5, 10]

Массивы: немутирующие методы (возвращают новый результат)

  • slice(begin, end) — диапазон [begin, end), поддерживает отрицательные индексы; без аргументов — поверхностная копия.

  • concat(valueOrArray, ...) — склеивает, возвращает новый массив.

  • indexOf(value, fromIndex)/lastIndexOf(value, fromIndex) — поиск, возвращает индекс или -1.

  • join(separator) — массив → строка с разделителем.

var src = [{ n: 1 }, { n: 2 }]; var copy = src.slice(); console.log(copy === src); // false copy[0].n = 99; console.log(src[0].n); // 99 // поверхностная копия console.log(["a", "b", "c"].join("-")); // "a-b-c" console.log([1, 2, 3].indexOf(2)); // 1

Перебор массивов и свёртка (ES5)

  • forEach(callback, thisArg) — перебрать элементы ради побочных эффектов.

  • map(callback, thisArg) — преобразовать каждый элемент, вернуть новый массив.

  • filter(callback, thisArg) — оставить элементы, где предикат вернул true.

  • every(callback, thisArg) — проверка «все соответствуют условию».

  • some(callback, thisArg) — проверка «хотя бы один соответствует».

  • reduce(callback, initialValue)/reduceRight(...) — свёртка к одному значению через аккумулятор.

var arr = [1, 2, 3, 4]; arr.forEach(function (x) { console.log(x); }); // 1 2 3 4 var squares = arr.map(function (x) { return x \* x; }); console.log(squares); // [1, 4, 9, 16] var evens = arr.filter(function (x) { return x % 2 === 0; }); console.log(evens); // [2, 4] console.log(arr.every(function (x) { return x > 0; })); // true console.log(arr.some(function (x) { return x > 3; })); // true var sum = arr.reduce(function (acc, x) { return acc + x; }, 0); console.log(sum); // 10

Строки: поиск и извлечение

  • 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).

var s = "JavaScript"; console.log(s.indexOf("Script")); // 4 console.log(s.slice(4)); // "Script" console.log(s.substring(4, 10)); // "Script" console.log(s.substr(4, 6)); // "Script" console.log(s.charAt(0)); // "J" console.log(s.charCodeAt(0)); // 74

Строки: преобразование, замена и разбиение

  • toUpperCase()/toLowerCase() — изменение регистра (возвращают новую строку).

  • trim() — удаляет пробелы по краям.

  • replace(search, replacement) — заменяет первое вхождение; для глобальной замены используйте регулярное выражение с флагом g.

  • split(separator, limit) — разбивает строку в массив по разделителю.

var s = " hello, world "; console.log(s.trim()); // "hello, world" console.log("a,b,c".split(",")); // ["a", "b", "c"] console.log("foo foo".replace(/foo/g, "bar")); // "bar bar"
var t = "abc"; var r = t.split("").reverse().join(""); console.log(r); // "cba"

Массивы ↔ строки: конвертация

split() превращает строку в массив, а join() — массив в строку. Следите за выбранным разделителем, чтобы корректно собирать/разбирать данные.

var csv = "1;2;3"; var arr = csv.split(";"); console.log(arr); // ["1", "2", "3"] var back = arr.join(";"); console.log(back); // "1;2;3"

Практические рецепты (ES5)

  • Удалить дубликаты простым способом:

var a = [1, 2, 2, 3]; var unique = a.filter(function (x, i) { return a.indexOf(x) === i; }); console.log(unique); // [1, 2, 3]
  • Безопасная сортировка чисел:

var nums = [10, 1, 5]; nums.sort(function (a, b) { return a - b; }); console.log(nums); // [1, 5, 10]
  • Сумма значений через reduce (с начальными значениями):

var empty = []; var s = empty.reduce(function (acc, x) { return acc + x; }, 0); console.log(s); // 0

Частые ошибки и лучшие практики

Last modified: 01 October 2025