Щоб витягти елемент, помістіть його індекс в квадратні дужки. Перший індекс 0:
Упс! Ми створили масив з двома фруктами і ослом. Тепер нам потрібно видалити осла.
Методи pop і push
У наступному прикладі показано, як «Осел» вилучають із масиву:
Зверніть увагу, що pop змінює сам масив.
Аналог pop - це метод push. який додає елемент в масив. Наприклад, ми забули додати персик:
Завдання для самостійного виконання
- Створіть масив styles з елементами "Jazz", "Blues";
- Додайте значення "Rock'n'Roll";
- Замініть друге значення з кінця значенням "Classic". У вас повинен вийти масив: "Jazz", "Classic", "Rock'n'Roll". Код повинен працювати для будь-якої довжини масиву;
- Вийміть останнє значення з масиву і виведіть його через alert.
Методи shift / unshift
І shift. і unshift можуть працювати з декількома елементами одночасно:
Завдання для самостійного виконання
Напишіть код, щоб вивести через alert випадкове значення з масиву arr:
Примітка: Код для отримання випадкового числа від мінімального до максимального значення (включно) наступний:
Нам потрібно витягти випадкове число від 0 до arr.length-1 (включно):
перебір масиву
Завдання для самостійного виконання
Створіть функцію find (arr, value). яка знаходить значення в заданому масиві і повертає його індекс або -1. якщо значення, не знайдено.
Можливе рішення може виглядати так:
Але це невірно, тому що == не визначає різницю між 0 і false.
Ще розумніше було б визначити find через умову, щоб перевірити, чи існує метод indexOf.
Завдання для самостійного виконання
Створіть функцію filterNumeric (arr). яка приймає масив і повертає новий масив, який містить лише числові значення з arr.
Приклад того, як це повинно працювати:
Рішення полягає в тому, щоб перебрати масив і додати значення в новий масив, якщо вони є числовими.
join і split
Він об'єднує масив в рядок, використовуючи заданий роздільник:
Зворотне перетворення легко виконується за допомогою методу split:
Завдання для самостійного виконання
Об'єкт включає в себе властивість className. яке містить імена класів, розділені пробілами:
Напишіть функцію addClass (obj, cls). яка додає клас cls. але тільки якщо він не існує:
Потрібно розділити className і цикл на частини. Якщо клас не знайдений, тоді він додається.
Цикл трохи оптимізований для збільшення продуктивності:
У наведеному вище прикладі змінна c визначається на початку циклу, і для її останнього індексу задається значення i.
Використання length для обрізки масиву
За допомогою властивості length можна обрізати масив таким чином:
Ви задаєте довжину, і браузер обрізає масив.
Array являє собою об'єкт, що з цього випливає
Це відрізняється від концепції в інших мовах, де масиви являють собою безперервний сегмент пам'яті. Це також відрізняється від черги або стека на основі пов'язаних списків.
Нечислові ключі масиву
Ключі - це числа, але вони можуть мати будь-які імена:
Наприклад, push / pop працюють тільки з крайніми елементами масиву, тому вони неймовірно швидкі.
push працює тільки з кінцем:
Методи shift / unshift повільні, тому що їм потрібно змінити нумерацію всього масиву. Метод splice також може привести до зміни нумерації:
Завдання для самостійного виконання
Який вийде результат? Чому?
Оскільки масиви є об'єктами, arr.. фактично є викликом методу об'єкта, таким як objmethod:
Розріджені масиви, опис length
У наступному прикладі ми додамо два елементи в порожні fruits. але значення length залишиться 100:
Якщо ви спробуєте вивести розріджений масив, браузер видасть значення пропущених індексів як порожні елементи:
Але масив - це об'єкт з двома ключами. Відсутні значення не займають місця.
Розріджені масиви поводяться химерно, коли до них застосовуються методи масиву. Вони й гадки не мають про те, що індекси пропущені:
Намагайтеся уникати розріджених масивів. У всякому разі, їх методи не будуть працювати нормально. Замість цього використовуйте Object.
Видалення з масиву
Як ми знаємо, масиви - це об'єкти, тому ми могли б використовувати delete. щоб видалити значення:
Ви бачите, що значення віддаляється, але не так, як ми хотіли б, тому що масив містить незаданій елемент.
Оператор delete видаляє пару ключ-значення, і це все. Природно, так як масив - це тільки хеш, позиція віддаленого елемента стає undefined.
Найчастіше нам потрібно видалити елемент, не залишаючи «дірок» між індексами. Існує ще один метод, який допоможе нам в цьому.
метод splice
Видаляє елемент deleteCount. починаючи з index. а потім вставляє на його місце elem1. elemN.
Давайте розглянемо декілька прикладів:
Таким чином, ви можете використовувати splice. щоб видалити один елемент з масиву. Номери елементів масиву зсуваються, щоб заповнити пробіл:
У наступному прикладі показано, як заміняти елементи:
Метод splice повертає масив віддалених елементів:
Даний метод також може використовувати негативний індекс, який відраховується з кінця масиву:
Завдання для самостійного виконання
Об'єкт містить властивість className. в якому містяться імена класів, розділені пробілами:
Напишіть функцію removeClass (obj, cls). яка видаляє клас cls. якщо він заданий:
Трохи оптимізуємо це:
У наведеному вище прикладі змінна c задана на початку циклу, і для i заданий її останній індекс.
Сам цикл виконується в зворотному напрямку, закінчуючись умовою i> = 0. Це зроблено тому, що i> = 0 перевіряється швидше, ніж i. Що прискорює пошук властивості в c.
метод slice
Можна опустити другий аргумент, щоб отримати всі елементи, починаючи з певного індексу:
Метод підтримує негативні індекси, так само, як String # slice.
метод reverse
Ще один корисний метод - reverse. Припустимо, я хочу отримати останню частину домену, наприклад, "com" від "my.site.com". Ось як це можна зробити:
Ви можете створювати довші виклики, наприклад, reverse ()0] [1[5]. синтаксис мови дозволяє це.
Сортування, метод sort (fn)
Метод sort () сортує масив, не змінюючи кількість елементів:
Запустіть наведений вище код. Ви отримаєте порядок 1. 15. 2. Це тому, що метод перетворює все в рядок і використовує за замовчуванням лексикографічний порядок.
Щоб зробити метод «розумніші», нам потрібно передати в нього призначену для користувача функцію порівняння. Вона повинна приймати два аргументи і повертати 1, 0 або -1:
Тепер все працює правильно.
Завдання для самостійного виконання
Створіть функцію ageSort (people) для сортування масиву об'єктів людей за віком:
Потрібно використовувати Array # sort і призначене для користувача порівняння:
Більш короткий варіант
Функція порівняння може бути коротше. Альтернативне рішення:
Воно працює, так як нам не потрібно повертати 1 / -1 / 0. працюватимуть позитивні або негативні числа.
new Array ()
Він використовується рідко тільки тому, що квадратні дужки [] коротше.
Також існує ймовірність того, що new Array. викликається з одним числовим аргументом, створить масив заданої довжини з невизначеними елементами:
У наведеному вище прикладі ми отримали undefined. бо new Array (number) створює порожній масив з параметром length рівним number.
Це може бути досить несподівано. Але якщо ви знаєте про цю особливість, ви можете використовувати new Array (number). наприклад, так:
Це оптимізований спосіб повторити рядок.
багатовимірні масиви
Це можна використовувати для створення багатовимірних масивів:
висновок
Цього має бути достатньо в 95% випадків. Щоб дізнатися про інші методи, зверніться до Посібника по масиву на Mozilla.
Переклад статті «Array» був підготовлений дружною командою проекту Сайтобудування від А до Я.