Масиви в javascript, javascript

Щоб витягти елемент, помістіть його індекс в квадратні дужки. Перший індекс 0:

Упс! Ми створили масив з двома фруктами і ослом. Тепер нам потрібно видалити осла.

Методи pop і push

У наступному прикладі показано, як «Осел» вилучають із масиву:

Зверніть увагу, що pop змінює сам масив.

Аналог pop - це метод push. який додає елемент в масив. Наприклад, ми забули додати персик:

Завдання для самостійного виконання

  1. Створіть масив styles з елементами "Jazz", "Blues";
  2. Додайте значення "Rock'n'Roll";
  3. Замініть друге значення з кінця значенням "Classic". У вас повинен вийти масив: "Jazz", "Classic", "Rock'n'Roll". Код повинен працювати для будь-якої довжини масиву;
  4. Вийміть останнє значення з масиву і виведіть його через 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» був підготовлений дружною командою проекту Сайтобудування від А до Я.

Схожі статті