Методы массивов JavaScript

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

Методы добавления/удаления

В главе Массивы мы уже говорили об этой группе методов. Среди них:

  • arr.push(...items) - помогает добавить элементы в конец;
  • arr.pop() - извлекает элемент из конца;
  • arr.shift() - извлекает элемент из начала;
  • arr.unshift(...items) - добавляет элементы в начало.

В этой главе мы расскажем о нескольких других методах.

Splice

Первый метод - это arr.splice. Он используется для добавления или удаления элементов в/из массива, а также для возвращения уже удаленных элементов. Таким образом, с помощью этого метода можно делать все: вставлять, удалять, заменять элементы.

Синтаксис выглядит так:

arr.splice(index[, deleteCount, elem1, ..., elemN])

Легче всего понять на примере.

В первом примере показано удаление элементов следующим образом:

javascript array splice
let arr = ["Welcome", "to", "W3Docs"]; arr.splice(1, 1); // from index 1 remove 1 element console.log(arr); // ["Welcome", "W3docs"]

В следующем примере мы удалим три элемента и заменим их на другие два:

javascript array splice javascript array splice
let arr = ["Welcome", "to", "W3Docs", "Javascript", "book"]; // remove 3 first elements and replace them with another arr.splice(0, 3, "Starts", "read"); console.log(arr) // now ["Starts", "read", "Javascript", "book"]

Теперь вы можете заметить, что splice возвращает массив удаленных элементов, как показано ниже:

javascript array splice
let arr = ["Welcome", "to", "W3Docs", "Javascript", "book"]; // remove 2 first elements let removed = arr.splice(0, 2); console.log(removed); // "Welcome", "to" <-- array of removed elements

Важно знать, что с помощью этого метода вы также можете вставлять элементы без каких-либо удалений. Для этого необходимо установить значение deleteCount равным 0, вот так:

javascript array splice
let arr = ["Welcome", "to", "W3Docs"]; // from index 2, delete 0 // then insert "Javascript" and "book" arr.splice(4, 0, "Javascript", "book"); console.log(arr); // "Welcome", "to", " W3Docs", "Javascript", "book"

Slice

arr.slice - это простой метод, намного проще, чем arr.splice.

Его синтаксис следующий:

arr.slice([start], [end])

Этот метод возвращает новый массив, копируя в него все элементы от индекса start до end (но не включая end). Если и start, и end выражают отрицательные позиции из массива, то будет использовано значение end.

Он очень похож на метод end, но создает подмассивы вместо подстрок.

Вот пример:

Javascript slice method, make subarray javascript
let arr = ["W", "3", "D", "o", "c", "s"]; console.log(arr.slice(1, 3)); // 3,D (copy from 1 to 3) console.log(arr.slice(-2)); // c,s (copy from -2 till the end)

Вы можете вызвать его без аргументов: str.slice создаст копию arr.

Concat

Метод arr.concat используется для создания нового массива, включающего в себя значения из других массивов, а также дополнительные элементы. Синтаксис будет выглядеть так:

arr.concat(arg1, arg2...)

Он принимает любое количество аргументов (массивы или значения).

Результатом будет новый массив с элементами из arr, затем arg1, arg2 и так далее.

Если аргумент argN является массивом, все его элементы будут скопированы. В противном случае будет скопирован сам аргумент.

Например:

Javascript concat method, create a new array javascript
let arr = ["a", "b"]; // create an array from: arr and ["c", "d"] console.log(arr.concat(["c", "d"])); // a,b,c,d // create an array from: arr and ["c", "d"] and [e,f] console.log(arr.concat(["c", "d"], ["e", "f"])); // a,b,c,d,e,f // create an array from: arr and ["c", "d"], then add values e and f console.log(arr.concat(["c", "d"], "e", "f")); // a,b,c,d,e,f

Итерация: forEach

Метод arr.forEach позволяет выполнить функцию для каждого элемента массива.

Вот синтаксис:

arr.forEach(function (item, index, array) {
  // ... do something with item
});

В следующем примере показаны все элементы массива:

// for each element call alert
["dog", "cat", "mouse"].forEach(alert);

Поиск в массиве

В этой части мы рассмотрим методы поиска в массиве.

javascript array splice

indexOf/lastIndexOf и includes

Эти методы имеют одинаковый синтаксис и выполняют то же самое, что и их строковые аналоги. Разница состоит в том, что они работают с элементами, а не с символами.

Что они делают:

  • arr.indexOf(item, from) ищет элемент item, начиная с индекса from, и возвращает его к месту, где был найден, иначе -1.
  • arr.lastIndexOf(item, from) аналогичен, но ищет справа налево.
  • arr.includes(item, from) ищет элемент item, начиная с индекса from, и возвращает true, если элемент был найден.

Давайте посмотрим на следующий пример:

Javascript indexOf, includes, last index arrays
let arr = [1, 0, false]; console.log(arr.indexOf(0)); // 1 console.log(arr.indexOf(false)); // 2 console.log(arr.indexOf(null)); // -1 console.log(arr.includes(1)); // true

Учтите, что эти методы используют сравнение ===. Таким образом, когда вы ищете false, он найдет false, а не ноль.

Find и FindIndex

Предположим, у вас есть массив с объектами и вы хотите найти объект с определенным условием. Тогда вам нужно использовать метод arr.find(fn) с этим синтаксисом:

let result = arr.find(function (item, index, array) {
  // if true is returned,the item is returned, and iteration is stopped
  // for falsy scenario returns undefined
});

Функция будет вызываться для элементов массива один за другим, следующим образом:

  • Элементом является item .
  • Индексом будет его индекс index.
  • Массивом является сам массив array.

В случае возврата true, поиск будет остановлен и будет возвращен элемент item-.

Например:

Javascript find index in array
let animals = [{ id: 1, name: "dog" }, { id: 2, name: "cat" }, { id: 3, name: "mouse" } ]; let animal = animals.find(item => item.id == 1); console.log(animal.name); // dog

Фильтр

Этот метод ищет первый элемент, который заставляет функцию возвращать true.

Если есть много элементов, вы можете использовать метод arr.filter(fn). Его синтаксис похож на find, но filter вернет массив со всеми подходящими элементами:

let results = arr.filter(function (item, index, array) {
  // if true item is pushed to results and the iteration continues
  // returns empty array if nothing found
});

Вот пример:

Javascript filter method
let animals = [{ id: 1, name: "dog" }, { id: 2, name: "cat" }, { id: 3, name: "mouse" } ]; // returns array of the first two animals let someAnimals = animals.filter(item => item.id < 3); console.log(someAnimals.length); // 2

Преобразование массива

В этой части мы рассмотрим методы, которые предназначены для преобразования и переупорядочивания массива.

map

Этот метод - один из самых полезных и часто используемых. Вот его синтаксис:

let result = arr.map(function (item, index, array) {
  // returns the new value instead of item
});

В этом примере каждый элемент преобразуется в свою длину:

Javascript map method
let lengths = ["dog", "cat", "mouse"].map(item => item.length); console.log(lengths); // 3,3,5

sort(fn)

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

Давайте посмотрим на следующий пример:

Javascript sort method
let arr = [1, 3, 25]; // the method reorders the content of arr arr.sort(); console.log(arr); // 1, 25, 3

Вы увидите что-то весьма странное в результате. Порядок выглядел как 1, 25, 3

Причина в том, что элементы сортируются как строки.

Для сравнений все элементы преобразуются в строки. Для строк используется лексикографический порядок ( "3" > "25").

Чтобы использовать свой порядок сортировки, вам нужно предоставить функцию в качестве аргумента arr.sort().

Вот пример:

Javascript sort method
function compareNumeric(a, b) { if (a > b) return 1; if (a == b) return 0; if (a < b) return -1; } let arr = [1, 3, 25]; arr.sort(compareNumeric); console.log(arr); // 1, 3, 25

reverse

Этот метод предназначен для изменения порядка элементов в arr на обратный.

Например:

Javascript reverse method
let arr = ["a", "b", "c", "d", "e"]; arr.reverse(); console.log(arr); // e,d,c,b,a

Он также может возвращать массив arr после инвертирования.

split и join

Метод str.split(delim) используется для разделения строки на массив с использованием определенного разделителя delim.

В следующем примере он разделяется на запятую, за которой следует пробел:

Javascript split method
let animals = 'dog, cat, mouse'; let arr = animals.split(', '); for (let animal of arr) { console.log(`A message to ${animal}.`); // A message to dog (and other names) }

Кстати, у этого метода есть альтернативный числовой аргумент, который является ограничением на длину массива. Если он предоставлен, дополнительные элементы будут игнорироваться. В любом случае, разработчики не часто используют его.

Пример будет выглядеть так:

Javascript split method
let arr = 'dog, cat, mouse, lion'.split(', ', 2); console.log(arr); // dog, cat

Если вы хотите сделать обратное преобразование split, вызовите arr.join(glue). Он создаст строку из элементов arr с glue между ними. Вот пример:

Javascript join method
let animalsArr = ['dog', 'cat', 'mouse']; let str = animalsArr.join(';'); // glue the array into a string using ; console.log(str); // dog;cat;mouse

reduce/reduceRight

Для итерации по массиву можно использовать forEach, for или for..of.

Если вы хотите итерироваться и возвращать данные для каждого элемента, можно использовать map.

Методы arr.reduce и arr.reduceRight выполняют похожие действия, но немного сложнее. Их можно использовать для вычисления одного значения на основе массива.

Синтаксис выглядит так:

let value = arr.reduce(function (accumulator, item, index, array) {
  // ...
}, [initial]);

Аргументы:

  • accumulator представляет собой результат предыдущего вызова функции, равный initial в первый раз;
  • item можно описать как текущий элемент массива.
  • index - это его позиция.
  • array - это сам массив.

В этом примере вы можете найти сумму массива в одной строке:

Javascript reduce method
let sumArr = [1, 2, 3, 4, 5]; let result = sumArr.reduce((sum, current) => sum + current, 0); console.log(result); // 15

Array.isArray

Массивы основаны на объектах.

Следовательно, typeof не позволит вам отличить простой объект от массива:

Javascript typeof method
console.log(typeof {}); // object console.log(typeof []); // same

Но разработчики так часто используют массивы, что существует специальный метод для этого: Array.isArray(value). Он возвращает true, если значение является массивом, и false, если это не так.

Пример следующий:

Javascript isArray method
console.log(Array.isArray({})); // false console.log(Array.isArray([])); // true

Время Викторины: Проверьте Свои Навыки!

отовы проверить свои знания? Погрузитесь в наши интерактивные викторины для более глубокого понимания и веселого способа закрепить знания.

Считаете ли это полезным?