Массивы

Разделы:


МетодыАргументыВозвращаетОписание
pushэлементы любого типаколичество элементовдобавляет элемент в конец массива
unshiftэлементы любого типаколичество элементовдобавляет элемент в начало
shiftничего не принимаетудалённый элементудаляет элемент в начале
popничего не принимаетудалённый элементудаляет последний элемент
splice1) индекс ( n >= 0 || n < 0 )
2) целое число (количество удаляемых элементов), 0 — не удалять
3) добавляемые к массиву элементы
массив, содержащий удалённые элементы, либо пустой массивудаляет или добавляет новые элементы по индексу
slice1) индекс ( n >= 0 || n < 0 )
2) индекс окончания копирования ( n >= 0 || n < 0 )
массив скопированных элементов либо пустой массивкопирует элементы в массиве по указанным индексам
concatэлементы любого типа, можно перечислять через запятую либо передавать массивыновый массив с добавленными элементамисоздаёт новый массив из текущего и добавленных значений
indexOf1) искомый элемент
2) индекс с которого его искать ( n >= 0 || n < 0 )
индекс найденного элемента либо -1ищет элемент с указанного индекса
lastIndexOf1) искомый элемент
2) индекс, с которого его искать ( n >= 0 || n < 0 )
индекс найденного элемента либо -1ищет элемент с указанного индекса, поиск начинает с конца в начало
includes1) искомый элемент
2) индекс, с которого его искать ( n >= 0 || n < 0 )
true если элемент найден либо falseищет элемент с указанного индекса
findcallback функциянайденный элемент или undefinedнаходит элемент по условию
findIndexcallback функциявозвращает индекс найденного элемента либо -1находит индекс элемента по условию
filtercallback функцияотфильтрованный массивфильтрует элементы в массиве по условию
mapcallback функциямассив результатоввызывает функцию для каждого элемента
sortcallback функцияотсортированный массив, текущий тоже будет изменёнсортирует массив на месте по условию, заданному в переданной функции
reverseничего не принимаетперевёрнутый массив, текущий тоже будет изменёнменяет порядок элементов наоборот
joinпринимает строковый параметр, в котором указан разделительсформированную из элементов строкусоздаёт строку из элементов
reducecallback функцияодно результирующее значениевыполняет функцию с каждым отдельным элементом, позволяет аккумулировать промежуточное значение
reduceRightcallback функцияодно результирующее значениевыполняет функцию с каждым отдельным элементом (справа налево), позволяет аккумулировать промежуточное значение
isArrayлюбой типtrue если массив и false если нетпроверяет что данный тип данных это массив
copyWithin1) индекс — куда вставить
2) индекс начала
3) индекс конца
изменённый массив, текущий тоже будет изменёнкопирует элементы по индексам и вставляет в назначенное место
forEachcallback функцияничего не возвращаетвыполняет callback функцию для каждого элемента
flatчисло — задаёт уровень вложенности массивовновый массив с объединёнными в него подмассивамиcоздаёт новый массив, в котором уровни вложенности будут подняты на указанный уровень
everycallback функцияtrue если все элементы массива положительно проходят проверку в ином случае falseпроверяет, удовлетворяют ли все элементы массива условию, заданному в передаваемой функции
somecallback функцияtrue если один из элементов массива положительно проходит проверку в ином случае falseпроверяет, удовлетворяет ли хотя бы один элемент массива условию, заданному в передаваемой функции
Array.from1) массивоподобный или итерируемый объект
2) функция которая выполняется для каждого элемента массива
массивсоздаёт новый экземпляр Array из массивоподобного или итерируемого объекта
fill1) значение заполнения
2) индекс начала
3) индекс конца
изменённый массив, текущий тоже будет изменёнзаполняет массив повторяющимся значением
at()число, может принимать отрицательные значенияэлемент массивапозволяет получить элемент массива по индексу

Добавление элемента

push

array.push(...items)

Добавляет элемент в конец, в виде аргумента принимает элемент любого типа. Изменяет текущий массив и количество элементов.


const fruit = ['персик', 'яблоко'];
let length = fruit.push('абрикос');

// return: length = 3
// Array: ["персик", "яблоко", "абрикос"]

const lists = [];
length = lists.push(...['персик', 'яблоко']);

// return: length = 2
// Array: ["персик", "яблоко"]

unshift

array.unshift(...items)

Добавляет элемент в начало, в виде аргумента принимает элемент любого типа. Изменяет текущий массив и количество элементов (из-за добавления в начало массив будет проиндексирован, что сказывается на производительности).


const fruit = ['персик', 'яблоко'];
let length = fruit.unshift('обрикос');

// return: length = 3
// Array: ["обрикос", "персик", "яблоко"]

const lists = [true, false];
length = lists.unshift(...['персик', 'яблоко']);

// return: length = 4
// Array: ["персик", "яблоко", true, false]

Удаление элемента

shift

array.shift()

Удаляет элемент в начале, возвращает удалённый элемент. Изменяет длину массива, поэтому эта операция медленная (не рекомендуется использовать на больших массивах).


const fruit = ['персик', 'яблоко'];
fruit.shift();

// return: "персик"
// Array: ["яблоко"]

pop

array.pop()

Удаляет последний элемент, возвращает удалённый элемент.


const fruit = ['персик', 'яблоко'];
fruit.pop();

// return: "яблоко"
// Array: ["персик"]

Изменение

splice

array.splice(index, deleteCount, ...items)

Начиная с индекса index, удаляет deleteCount элементов и вставляет items. Параметры deleteCount и items являются необязательными. Возвращает массив удалённых элементов, если ничего не было удалено — то пустой массив.


let fruit = ['персик', 'яблоко', 'мандарин', 'груша'];
let elements = fruit.splice(2, 0, 'банан');

// return: []
// Array: ["персик", "яблоко", "банан", "мандарин", "груша"]

fruit = ['персик', 'яблоко', 'мандарин', 'груша'];
elements = fruit.splice(2, 2, 'банан');

// return: ["мандарин", "груша"]
// Array: ["персик", "яблоко", "банан"]

slice

array.slice(start, end)

Cоздаёт новый массив, копируя в него элементы с позиции start до end (не включая end).


const fruit = ['персик', 'яблоко', 'банан', 'мандарин', 'груша'];

fruit.slice(2);
// return: ['банан', 'мандарин', 'груша']

fruit.slice(1, 5);
// return: ['яблоко', 'банан', 'мандарин', 'груша']

fruit.slice(-2);
// return: ['мандарин', 'груша']

fruit.slice(2, -1);
// return: ['банан', 'мандарин']

concat

array.concat([3, 4])

Cоздаёт новый массив, в который копирует данные из других массивов и дополнительные значения.


const fruit = ['персик', 'яблоко'];
const basket = fruit.concat('банан', ['мандарин', 'груша']);

// return: ["персик", "яблоко", "банан", "мандарин", "груша"]

flat

array.flat(Infinity)

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


[1, 2, [3, 4]].flat();
// return: [1, 2, 3, 4]

[1, 2, [3, 4, [5, 6]]].flat();
// return: [1, 2, 3, 4, [5, 6]]

[1, 2, [3, 4, [5, 6]]].flat(2);
// return: [1, 2, 3, 4, 5, 6]

[1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]].flat(Infinity);
// return: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Поиск среди элементов

indexOf

array.indexOf(item, from)

Ищет item, начиная с индекса from, и возвращает индекс, на котором был найден искомый элемент, в противном случае -1.


const fruit = ['персик', 'яблоко', 'банан', 'мандарин', 'груша'];

fruit.indexOf('банан', 1);
// return: 2

fruit.indexOf('банан', 3);
// return: -1

lastIndexOf

array.lastIndexOf(item, from)

Ищет item, начиная с индекса from ( поиск происходит с конца в начало ), и возвращает индекс, на котором был найден искомый элемент, в противном случае -1.


const fruit = ['персик', 'яблоко', 'банан', 'мандарин', 'груша'];

fruit.lastIndexOf('банан', 1);
// return: -1

fruit.lastIndexOf('банан', 3);
// return: 2

includes

array.includes(item, from)

Ищет item, начиная с индекса from, и возвращает true, если поиск успешен.


const fruit = ['персик', 'яблоко', 'банан', 'мандарин', 'груша'];

fruit.includes('банан', 1);
// return: true

fruit.includes('банан', 3);
// return: false

fruit.includes('банан');
// return: true

fruit.includes('банан', -3);
// return: true

find

array.find(item => item.id == 1)

Находит элемент по условию. В виде аргумента принимает callback функцию, возвращает найденный элемент, если ничего не нашёл — то undefined.

Callback функция может принимать следующие аргументы:

  • element — текущий элемент
  • index — индекс элемента
  • array — текущий массив
  • thisArg — this текущего объекта

[1, 2, 3, 4, 5, 6].find((element, index) => {
  return element > 4;
});

// return: 5

findIndex

array.findIndex(item => item.id == 1)

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

Callback функция может принимать следующие аргументы:

  • element — текущий элемент
  • index — индекс элемента
  • array — текущий массив
  • thisArg — this текущего объекта

[1,2,3,4,5,6].findIndex((element, index) => {
  return element > 4;
});
// return: 4

[1,2,3,4,5,6].findIndex((element, index) => {
  return element > 8;
});
// return: -1

filter

array.filter(item => item.id < 3)

Возвращает массив, состоящий из отфильтрованных по условию элементов.

Callback функция может принимать следующие аргументы:

  • element — текущий элемент
  • index — индекс элемента
  • array — текущий массив
  • thisArg — this текущего объекта

const fruit = ['персик', 'яблоко', 'банан', 'мандарин', 'груша'];
fruit.filter(element => element.length > 5);

// return: ["персик", "яблоко", "мандарин"]

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

map

array.map(item => item.length)

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

Callback функция может принимать следующие аргументы:

  • element — текущий элемент
  • index — индекс элемента
  • array — текущий массив
  • thisArg — this текущего объекта

const fruit = ['персик', 'яблоко', 'банан'];

fruit.map((element, index) => {
 return `*${ element } ${ index }*`
});

// return: ["*персик 0*", "*яблоко 1*", "*банан 2*"]

sort

array.sort((a, b) => a - b )

Сортирует массив на месте, меняя в нём порядок элементов. Принимает функцию, задающую метод сортировки (a — следующий элемент, b — текущий). Возвращает массив отсортированных элементов.

Функция должна возвращать числовые значения:

  • если вернёт 0, то значения не меняют свои позиции относительно друг друга (но эта пара будет отсортирована относительно остальных элементов)
  • если вернёт 1, то элементы остаются на своих позициях
  • если вернёт -1, то текущий элемент больше следующего и они меняются местами

const fruit = ['персик', 'яблоко', 'банан', 'мандарин', 'груша'];

fruit.sort();
// return: ["банан", "груша", "мандарин", "персик", "яблоко"]

const numbers = [4, 2, 5, 1, 3].sort(function(a, b) {
  return a - b;
})

// return: [1, 2, 3, 4, 5]

reverse

array.reverse()

Меняет порядок элементов в массиве на обратный. Параметры не принимает, возвращает перевёрнутый массив.


const fruit = ['персик', 'яблоко', 'банан'];

fruit.reverse();
// return: ["банан", "яблоко", "персик"]

join

array.join('')

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


const fruit = ['персик', 'яблоко', 'банан'];

fruit.join(' ');
// return: "персик яблоко банан"

fruit.join('');
// return: "персикяблокобанан"

fruit.join(',');
// return: "персик,яблоко,банан"

reduce

array.reduce((sum, current) => sum + current)

Проходит по массиву и выполняет функцию с каждым отдельным элементом, позволяет аккумулировать промежуточное значение. Принимает callback функцию, возвращает одно результирующее значение.

Callback функция может принимать следующие аргументы:

  • accumulator — аккумулятор, аккумулирующий значение
  • element — текущий элемент массива
  • index — текущий индекс массива
  • array — массив, над которым совершаются действия

const fruit = ['персик', 'яблоко', 'банан'];

const text = fruit.reduce(function(accumulator, element, index) {
  return accumulator += `${ index ? ', ' : '' }${ element }`;
}, '');
// return: "персик, яблоко, банан"

const number = [5, 5, 5, 5].reduce(function(accumulator, element) {
  return accumulator + element;
}, 5);
// return: 25

reduceRight

array.reduceRight((sum, current) => sum + current)

Работает аналогично reduce, но проходит по массиву справа налево.

Callback функция может принимать следующие аргументы:

  • accumulator — аккумулятор, аккумулирующий значение
  • element — текущий элемент массива
  • index — текущий индекс массива
  • array — массив над которым совершаются действия

const fruit = ['персик', 'яблоко', 'банан'];

const text = fruit.reduceRight(function(accumulator, element, index) {
  return accumulator += `${ element }${ index ? ', ' : '' }`;
}, '');

// return: "банан, яблоко, персик"

Циклы

forEach

array.forEach( (item) => {} )

Выполняет переданную callback функцию для каждого элемента массива. Ничего не возвращает.

Callback функция может принимать следующие аргументы:

  • element — текущий элемент
  • index — индекс элемента
  • array — текущий массив
  • thisArg — this текущего объекта

const fruit = ['персик', 'яблоко', 'банан'];

fruit.forEach( (item, index, array) => {
  array[index] +=' *';
} )
// return: ["персик *", "яблоко *", "банан *"]

Дополнительно

isArray

Array.isArray( value )

Возвращает true, если value — массив, и false, если нет.


const fruit = ['персик', 'яблоко', 'банан'];

Array.isArray(fruit);
// return: true

Array.isArray([]);
// return: true

Array.isArray('text');
// return: false

fill

array.fill(value, start, end)

Заполняет массив повторяющимися value, начиная с индекса start до end. Возвращает изменённый массив при этом оригинал тоже будет изменён.


let fruit = ['персик', 'яблоко', 'банан'];


fruit.fill();
// return: [undefined, undefined, undefined]

fruit.fill('абрикос');
// return: ["абрикос", "абрикос", "абрикос"]


fruit = ['персик', 'яблоко', 'банан'];

fruit.fill('абрикос', 2, 3);
// return: ["персик", "яблоко", "абрикос"]

copyWithin

array.copyWithin(target, start, end)

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


const fruit = ['персик', 'яблоко', 'банан'];

fruit.copyWithin(0, 2, 3);
// return: ["банан", "яблоко", "банан"]

every

array.every(callback)

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

Callback функция может принимать следующие аргументы:

  • element — текущий элемент
  • index — индекс элемента
  • array — текущий массив
  • thisArg — this текущего объекта

const fruit = ['персик', 'яблоко', 'банан'];

fruit.every((item) => {
return item.length >= 4;
});
// return: true

fruit.every((item) => {
return item === 'персик';
});
// return: false

fruit.every((item) => {
return item.length >= 6;
});
// return: false

some

array.some(callback)

Проверяет, удовлетворяет ли хотя бы один элемент массива условию, заданному в передаваемой функции. Возвращает true, если один из элементов массива положительно проходит проверку, в ином случае false.

Callback функция может принимать следующие аргументы:

  • element — текущий элемент
  • index — индекс элемента
  • array — текущий массив
  • thisArg — this текущего объекта

const fruit = ['персик', 'яблоко', 'банан'];

fruit.some((item) => {
return item.length === 5;
});
// return: true

fruit.some((item) => {
return item === 'апельсин';
});
// return: false

fruit.some((item) => {
return item === 'персик';
});
// return: true

Array.from

Array.from(object)

Создаёт новый экземпляр Array из массивоподобного или итерируемого объекта. Принимает: 1) массивоподобный или итерируемый объект 2) функция которая выполняется для каждого элемента массива. Возвращает массив.


Array.from('text')
// return: ["t", "e", "x", "t"]

Array.from([1, 2, 3], x => x + x)
// return: [2, 4, 6]

const elements = document.querySelectorAll('button');

Array.from(elements)
// return: [HTMLButtonElement, HTMLButtonElement]

Array.at()

Array.at(-1)

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


const fruit = ['персик', 'яблоко', 'банан'];

fruit.at(-1);
// return: "банан"

fruit.at(1);
// return: "яблоко"

fruit.at();
// return: "персик"

// обычный способ получения последнего элемента
fruit[fruit.length -1];
// return: "банан"