JavaScript, масиви: опис

  1. Подання інформації: змінні і дані
  2. Синтаксичні конструкції мови
  3. За межами синтаксису
  4. JavaScript масив: створення
  5. Використання масивів
  6. розмірність масиву
  7. Додавання і видалення елементів
  8. Сортування, рядки і елементи масиву
  9. Розумні масиви і власні індекси
  10. Практика роботи з масивами

JavaScript - сучасна мова програмування, він унікальний в частині синтаксису і семантики. Має специфіку, але зручний в застосуванні і ефективний, коли мова йде про розробку динамічного і надійного ресурсу мережі.
JavaScript - сучасна мова програмування, він унікальний в частині синтаксису і семантики JavaScript масив - сучасна форма представлення даних, що відрізняється від подібних структур інших мов. Досвід в області подання та обробки інформації для JavaScript завжди мав істотне значення. Саме тут, в браузері, працює діалог з клієнтом. Саме тут, важливо швидко розібрати рядок інформації від сервера і розписати її по потрібним тегами. Серверні мови формують зміст і структуру сторінок, але їх правильне використання - турбота мови браузера.

Подання інформації: змінні і дані

Професійний розробник використовує змінні в простих випадках, коли «робить» for (...) {...}, «контролює» while (...) {...}, «використовує» конструкцію switch () {case "": ...}, ... У всіх інших випадках інформація може надаватися структурами даних.
Професійний розробник використовує змінні в простих випадках, коли «робить» for ( Досить рідко дані представляються простим набором змінних. Це статична конструкція, яку об'єднує спільність в іменуванні і використанні. Робота з наборами змінних обмежена обсягом інформації, що представляється, тому використовується для простих алгоритмів і в локальних функціях.
JavaScript масив - більш динамічний і ємний варіант змінної, коли вона представляє собою структуру даних. Індексуючи масив, наприклад, по лінії значень, часу або іншому параметру, можна мати різний зміст для кожного індексу. Масив може бути комплектом (певною структурою) змінних, який, будучи поміщеним в інший масив, представить собою динаміку такої структури по параметру або за часом.
Нарешті, можна створити масив об'єктів або систему об'єктів - концептуальну комбінацію даних, що мають структуру, зміст і комплект методів, які «самі по собі» проявляють відповідні властивості.
У всіх перерахованих випадках інформація може надаватися жорстко, формально і є для обробки засобами мови. Тільки в тому випадку, якщо кодом маніпулює «сама» система об'єктів і не допускається жодної конструкції поза методу того чи іншого об'єкта, можна говорити про те, що є шанс обробляти і створювати інформацію, не формалізовану або формалізованих в процесі виконання алгоритму.

Синтаксичні конструкції мови

У першому наближенні JavaScript масив подібний аналогічним синтаксичним конструкціям інших мов. Семантика також еквівалентна, за винятком форм її вираження. Можна використовувати синтаксис і семантику JavaScript і успішно вирішувати будь-яку складну задачу.
У першому наближенні JavaScript масив подібний аналогічним синтаксичним конструкціям інших мов Шансів, що буде досягнута повна мобільність коду і адаптація створеного ресурсу до постійно змінюваних умов застосування, адекватна реакція на будь-який непередбачене зміна вхідної інформації і правил її обробки, немає ніяких, але практично будь-яке завдання, яку здатний поставити сучасний замовник, можна успішно вирішити.
Стандарт синтаксису мови, який визначає на JavaScript масиви, функції та методи, досить великий, але на практиці зазвичай використовується лише частина.
forEach - найцікавіший метод масиву. JavaScript надає розробнику визначити власну функцію для виконання роботи з кожним елементом масиву. Тут немає поняття 'break', тобто forEach слід розглядати як операцію над усіма елементами масиву.

    aData.forEach (function (val, ind, arr) {...});

тут 'val' - елемент, 'ind' - його індекс, а 'arr' - власне масив 'aData'. Функція може виконувати будь-які дії над елементами масиву. Якщо вона буде мати певний сенс, то це буде операцією розробника, а не синтаксисом мови, тобто масив буде мати не тільки зміст, а й операції, йому доступні згідно з його призначенням в загальному контексті алгоритму.

За межами синтаксису

Використовуючи масив об'єктів JavaScript, можна вийти за межі синтаксису. Формально кожна змінна об'єкта і кожна конструкція його методу лежить в межах синтаксису мови, але в контексті об'єктно-орієнтованого програмування виникає системний ефект - нова якість, яке пропонує власний синтаксис: «самостійні» відносини між об'єктами.
Класична концепція розробки програм: переклад формального алгоритму в конкретні синтаксичні конструкції мови. У будь-якому місці коду є жорсткий зв'язок з тим що було до цього місця і з тим, що буде після нього.
Використовуючи масив об'єктів JavaScript, можна вийти за межі синтаксису Об'єктно-орієнтована формула виглядає кардинально інакше. Існують об'єкти, у яких є зміст і властивості. Саме це забезпечує відносини (код, їх реалізує) об'єктів один з одним. Ніякого коду поза цих відносин бути не повинно.
У JavaScript елемент масиву і механізм доступу до нього має оригінальний контекст. Всі елементи еквівалентні, але останній - особливий. Масив - це не об'єкт, але, розглядаючи масив крізь призму його останнього елемента, в контексті механізму доступу до нього, можна отримати об'єкт, який змінює свою сутність і властивості, - це важливе упущення склалася (сучасної) концепції об'єктно-орієнтованого програмування, побічно реалізоване розробниками мови JavaScript.

JavaScript масив: створення

Ідеальна та красива система освіти масиву:

    var aData = []; // по суті завжди масив; var aData = {}; // за змістом, можливо, асоціативний масив;

можна написати і більш "інтелігентно":
або зовсім вже "закомплексованих":

    var aData = new Array (13).

JavaScript не наполягає на обов'язковій вказівці кількості елементів і не нав'язує ніяких правил щодо індексації, розмірів і типів елементів. На цій простій підставі не рекомендується зловживати своїми правами, обмежуючи їх: всі масиви повинні бути представлені і використані максимально вільним чином.

Використання масивів

Кожен елемент масиву має індекс - числове значення від 0 і до 232, але не слід наближатися до цієї цифри. Практичний і прагматичний JavaScript масив - це десятки, сотні, тисячі елементів, але не більше. Якщо потрібно більше, краще спочатку переглянути алгоритм або технічне завдання, а вже якщо нічого не вийде, то тільки тоді можна проектувати в надрах браузера багатомільйонні масивні конструкції.
Кожен елемент масиву має індекс - числове значення від 0 і до 232, але не слід наближатися до цієї цифри Індекси елементів масиву не завжди послідовні. На JavaScript видалити елемент масиву - значить зробити в ньому «дірку». У процесі використання масив цілком може перетворитися в «решето» індексів, що ніяк не позначиться на його працездатності, на збереження інших елементів.
JavaScript позбавлений лаконічною конструкції PHP: $ aData [] = "новий елемент"; і пропонує жорстко вказувати, що додається і в якому саме елементі (з яким індексом) змінюється значення. Тип елемента не грає ролі. Масив може містити все що допускається синтаксисом, в будь-якому порядку і асортименті.
Методи push () і pop () нівелюють недолік «$ aData [] = ...», але звертають увагу розробника на ідею останнього елемента і нагадують про поняття стека. Аналогічна пара методів - unshift () і shift () - працює з першим елементом масиву, зміщуючи в бік великих індексів інші елементи.
Для JavaScript довжина масиву - відносне поняття. Воно не завжди відображає реальну кількість елементів, і, прив'язуючись до методу length, наприклад, в циклі, завжди слід перевіряти, чи існує елемент з потрібним індексом насправді.

розмірність масиву

Системи «завжди одномірні», але будь-яка система складається з внутрішніх підсистем, а сама по собі є частиною чогось більш глобального. Подібно загальної концепції систем, в JavaScript двовимірний масив відсутня, але його легко можна створити, додаючи в якості елементів масиву інші масиви.
Системи «завжди одномірні», але будь-яка система складається з внутрішніх підсистем, а сама по собі є частиною чогось більш глобального Індексація за внутрішніми масивів формується природним чином: «aData [i] [j] ... [z]», але завжди краще ідея:

    var aElement = aData [i]; // вибрати внутрішній масив; aElement [j] = ...; // використовувати елемент внутрішнього масиву.

В JavaScript додати в масив дозволено змінну будь-якого типу і в будь-якому порядку. У внутрішній масив можна також щось додавати за загальними правилами. Для доступу до елементів можна використовувати послідовність дужок [], але завжди краще виконувати перепрісваіванія, обмежуючись в кожному виразі тільки однією парою [].
Багатовимірні масиви JavaScript - це нормально, передбачено синтаксисом і цілком можна застосувати на практиці. Але, як і в інших мовах, найкраще, коли вимірювань менше, а читаність коду вище. Програми, звичайно ж, пишуться для комп'ютерів, для інтерпретаторів і компіляторів, але пишуть їх люди, супроводжують теж люди і чим вище доступність коду для автора і стороннього розробника, тим він практичніше.

Додавання і видалення елементів

Синтаксис JavaScript дозволяє додавати елементи в масив, просто створюючи новий індекс:

    aData [3] = "деяке значення"; aData [100] = "останній елемент".

Після цих операторів JavaScript масив aData матиме 101 елемент. Нумерація починається з індексу 0. Для методу length не має значення, скільки насправді елементів було в масиві на момент виконання «aData [100] = ...;».
Після цих операторів JavaScript масив aData матиме 101 елемент Щоб на JavaScript видалити елемент масиву, можна скористатися його методами pop () або shift (). У першому випадку результат var last = aInfo.pop () буде 'кавун', а в масиві залишиться: 'яблуко', 'груша', 'мандарин'. У другому випадку, var first = aInfo.shift () буде 'яблуко', а інші елементи зрушаться до початку.
Такий варіант дуже ефективний, коли масив об'єктів JavaScript являє собою об'єкт, що змінюється семантики і змісту. Механізм вибірки елемента з його видаленням дозволяє використовувати поточний елемент масиву і відразу перейти до наступного. Як в стеці: взяв з стека, використовував - і отримав доступ до наступного елементу.
При використанні оператора JavaScript видалити елемент масиву можна так:
Після виконання цього оператора елемент на самому справи залишиться в масиві, але його значенням стане 'undefined'. Використовуючи метод slice, JavaScript масив можна «розрізати»:

    aData = aInfo.slice (0, 2).

Вихідний масив aInfo залишиться без змін, а в aData потраплять тільки 'яблуко' і 'груша'. Якщо записати:
то в масиві aData остануться тільки 'мандарин' і 'кавун'.

Сортування, рядки і елементи масиву

Операції JavaScript: сортування масиву, перетворення масиву в рядок, формування масиву з рядка і зміна порядку елементів найбільш затребувані. Виконання цих операцій здійснюється за допомогою методів:

    sort (сортувати елементи), join (перетворити масив в рядок), split (перетворити рядок в масив), reverse (змінити порядок елементів).

Це найбільш цікаві та використовувані інструменти обробки масивів і рядків. Цікава особливість: для JavaScript елемент масиву і рядок - своєрідні взаємодоповнюючі якості. Якщо не розглядати характерну особливість сучасних мов: будь-яка змінна це завжди рядок, тобто завжди може розглядатися як рядок, то трансформація масиву в рядок і назад - дуже популярна і ефективна операція.
Це найбільш цікаві та використовувані інструменти обробки масивів і рядків Особливо оригінально використання пари join / split: об'єднання елементів масиву в рядок відбувається по одному разделителю (часто по-пустому, тобто елементи зливаються в один рядок), а зворотне перетворення в масив виконується по іншому разделителю.
Якщо не брати до уваги реалізацію методів злиття і поділу, то використання цієї пари дозволяє створювати відмінні алгоритми.
Функція reverse () застосовується безпосередньо до масиву і змінює в ньому порядок проходження елементів на зворотний. Функція sort () сортує елементи в вихідному масиві, повертає відсортований в алфавітному порядку результат.
Якщо в якості параметра в sort (function (a, b) {...; return result;}) передати функцію, то можна управляти порядком сортування за власним алгоритмом. Така функція повинна повертати "0", якщо 'a' і 'b' еквівалентні, '-1' - якщо 'a' повинен передувати 'b' і '1' - якщо 'b' повинен передувати 'a'.
Якщо по відношенню до функції reverse () немає шансів отримати неправильний результат, то щодо сортування має істотне значення алгоритм її виконання і тестування написаного коду. Особливо важливо про це пам'ятати. коли масив містить символи (рядки) національного алфавіту.

Розумні масиви і власні індекси

Для JavaScript асоціативний масив - це примітивна форма об'єкта. Тут просто немає методів, а є тільки пари "ключ" і "значення". Для позначення такого масиву використовується пара фігурних дужок.
Для JavaScript асоціативний масив - це примітивна форма об'єкта В даному прикладі використовується масив cSortCols, елементи якого приймають три значення:

    '' - немає сортування; 'u' - сортування за зростанням (up); 'd' - сортування за убуванням (down).

Однак в залежності від того, що саме сортується (в даному прикладі сайт розроблявся для пасажирських перевезень на маршрутах): пасажири, перевізники, автобуси чи міста. Тому в таблицях елементів допускається сортування тільки по конкретним колонок. Тому на кожній конкретній сторінці, масив cSortCols має конкретний зміст: cUsersSort, cCompaniesSort, cBusesSort або cCitiesSort.
Створюючи на JavaScript асоціативний масив, можна піти значно далі. Наведений приклад сортування - це приватне рішення дуже приватної завдання: вихід із ситуації, коли власна функція JavaScript (sort) не може бути застосована.
Структури даних - це дуже добре, і використовувати набори змінних дуже непрактично. Але ніхто не забороняє використовувати імена змінних в якості індексів. Масив, в якому індекси представлені іменами змінних, - чудова мобільна структура даних. У ній не обов'язково будуть все індекси, але в кожному місці програми вони будуть в потрібному складі.
Розробник може конструювати "розумні" масиви, які будуть відображати потрібні структури даних в потрібному місці. При цьому можна не переходити до повноцінного застосування об'єктів, просто використовувати їх можливості на етапі опису структури та змісту даних.

Практика роботи з масивами

На відміну від серверних мов, в яких завжди ясно, що обробляти і що повинно бути в результаті, в JavaScript потрібно специфічне багаторівневе мислення. Сторінка сайту може породжувати події та виклики скриптів найнесподіванішим чином. Навіть коли технічне завдання на сайт виконано ідеальним чином, а діалог з відвідувачем ніяк не може вийти за встановлені рамки, несподіванки трапляються.
На відміну від серверних мов, в яких завжди ясно, що обробляти і що повинно бути в результаті, в JavaScript потрібно специфічне багаторівневе мислення Характерною особливістю JavaScript є те, що елемент сторінки може активувати той чи інший процес. В результаті будуть змінені ті чи інші дані, масиви, об'єкти. Інший процес повинен мати уявлення про те, що було змінено.
В ідеалі процеси слід розписати по об'єктах і масивів таким чином, щоб будь-яка подія, ініціюючи один процес, визначало все, що необхідно для всіх інших процесів, від нього залежать.
Можна не вітати об'єктно-орієнтоване програмування і не прагнути до того, щоб всі сторінки сайту забезпечувалися повнофункціональними системами об'єктів, які самі по собі вступають між собою у відносини і немає жодного рядка коду поза методів таких об'єктів, але навіть в разі виключно класичного стилю розробки JavaScript масиви, особливо асоціативні і збройні наборами реалізацій функції forEach, - відмінний засіб для надійного і практичного коду.

джерело