Масиви пропонують безліч методів. Щоб було простіше, в цьому розділі вони розбиті на групи.
Додавання/видалення елементів
Ми вже знаємо методи, які додають чи видаляють елементи з початку чи з кінця:
arr.push(...items)– додає елементи до кінця,arr.pop()– дістає елемент з кінця,arr.shift()– дістає елемент з початку,arr.unshift(...items)– додає елементи в початок.
Розглянемо й інші.
splice
Як видалити елемент з масиву?
Масиви є об’єктами, тому ми можемо спробувати використати delete:
let arr = ["I", "go", "home"];
delete arr[1]; // видалимо "go"
alert( arr[1] ); // undefined
// тепер arr = ["I", , "home"];
alert( arr.length ); // 3
Начебто, елемент був видалений, але при перевірці виявляється, що масив все ще має 3 елементи arr.length == 3.
Це нормально, тому що все, що робить delete obj.key – це видаляє значення за ключем key. Це нормально для обʼєктів, але для масивів ми звичайно хочемо, щоб інші елементи змістились і зайняли місце, що звільнилося. Ми чекаємо, що масив стане коротшим.
Тому слід застосовувати спеціальні методи.
Метод arr.splice – це універсальний «швейцарський ніж» для роботи з масивами. Вміє все: додавати, видаляти і замінювати елементи.
Його синтаксис:
arr.splice(start[, deleteCount, elem1, ..., elemN])
Він змінює arr починаючи з позиції start: видаляє deleteCount елементів і вставляє elem1, ..., elemN на їх місце. Повертається масив з видалених елементів.
Цей метод легко зрозуміти на прикладах.
Почнемо з видалення:
let arr = ["I", "study", "JavaScript"];
arr.splice(1, 1); // з індексу 1 видалимо 1 елемент
alert( arr ); // ["I", "JavaScript"]
Легко, правда? Починаючи з індексу 1, він видалив 1 елемент.
У наступному прикладі ми видаляємо 3 елементи та замінюємо їх двома іншими:
let arr = ["I", "study", "JavaScript", "right", "now"];
// видалимо 3 перших елементи і замінимо їх іншими
arr.splice(0, 3, "Let's", "dance");
alert( arr ) // отримаєм ["Let's", "dance", "right", "now"]
Тут ми бачимо, що splice повертає масив видалених елементів:
let arr = ["I", "study", "JavaScript", "right", "now"];
// видалимо 2 перших елементи
let removed = arr.splice(0, 2);
alert( removed ); // "I", "study" <-- масив видалених елементів
Метод splice також може вставляти елементи без будь-яких видалень. Для цього нам потрібно встановити значення 0 для deleteCount:
let arr = ["I", "study", "JavaScript"];
// починаючт з індекса 2
// видалимо 0 елементів
// ваставити "complex" та "language"
arr.splice(2, 0, "complex", "language");
alert( arr ); // "I", "study", "complex", "language", "JavaScript"
Тут і в інших методах масиву допускаються відʼємні індекси. Вони дозволяють почати відлік елементів з кінця, як тут:
let arr = [1, 2, 5];
// починаючи з індексу -1 (перед останнім елементом)
// видалимо 0 елементів,
// вставимо значення 3 та 4
arr.splice(-1, 0, 3, 4);
alert( arr ); // 1,2,3,4,5
slice
Метод arr.slice набагато простіший, ніж схожий на нього arr.splice.
Його синтаксис:
arr.slice([start], [end])
Він повертає новий масив, копіюючи до нього всі елементи від індексу start до end (не включаючи end). І start, і end можуть бути відʼємними. В такому випадку відлік буде здійснюватися з кінця масиву.
Він подібний до рядкового методу str.slice, але замість підрядків створює підмасиви.
Наприклад:
let arr = ["t", "e", "s", "t"];
alert( arr.slice(1, 3) ); // e,s (копіює з 1 до 3)
alert( arr.slice(-2) ); // s,t (копіює з -2 до кінця)
Можна викликати slice і взагалі без аргументів. arr.slice() створить копію масиву arr. Це часто використовують, щоб створити копію масиву для подальших перетворень, які не повинні змінювати вихідний масив.
concat
Метод arr.concat створює новий масив, в який копіює дані з інших масивів та додаткові значення.
Його синтаксис:
arr.concat(arg1, arg2...)
Він приймає будь-яку кількість аргументів – масивів або значень.
Результатом є новий масив, що містить елементи з arr, потімarg1, arg2 тощо.
Якщо аргумент argN є масивом, то всі його елементи копіюються. В іншому випадку буде скопійовано сам аргумент.
Наприклад:
let arr = [1, 2];
// створимо масив з: arr і [3,4]
alert( arr.concat([3, 4]) ); // 1,2,3,4
// створимо масив з: arr, [3,4] і [5,6]
alert( arr.concat([3, 4], [5, 6]) ); // 1,2,3,4,5,6
// створимо масив з: arr і [3,4], також добавимо значення 5 і 6
alert( arr.concat([3, 4], 5, 6) ); // 1,2,3,4,5,6
Зазвичай він просто копіює елементи з масивів. Інші обʼєкти, навіть якщо вони виглядають як масиви, додаються як є: