Новини високих технологій
» » JavaScript, масиви: опис

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

16-03-2017, 21:48
2 533
jаvascript – сучасна мова програмування, він унікальний у частині синтаксису і семантики. Має специфіку, але зручний у застосуванні і ефективний, коли мова йде про розробку динамічного і надійного ресурсу мережі.
JavaScript, масиви: опис
jаvascript масив - сучасна форма подання даних, що відрізняється від подібних структур інших мов. Досвід в області подання і обробки інформації для jаvascript завжди мав істотне значення. Саме тут, в браузері, працює діалог з клієнтом. Саме тут, важливо швидко розібрати рядок інформації від сервера і розписати її за потрібне тегам. Серверні мови формують зміст і структуру сторінок, але їх правильне використання турбота мови браузера.

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

Професійний розробник використовує змінні в простих випадках, коли «робить» for() {}, «контролює» while () {}, «використовує» конструкцію switch () {case "": }, У всіх інших випадках інформація представляється структурами даних.

Досить рідко дані представляються простим набором змінних. Це статична конструкція, яку об'єднує спільність в іменуванні і використанні. Робота з наборами змінних обмежена обсягом представленої інформації, тому використовується для простих алгоритмів і в локальних функціях. jаvascript масив - більш динамічний і ємний варіант змінної, коли вона являє собою структуру даних. Індексуючи масив, наприклад, по лінії значень, часу або іншому параметру, можна мати різний зміст для кожного індексу. Масив може бути комплектом (певною структурою) змінних, який, будучи поміщеним в інший масив, представить собою динаміку такої структури по параметру або за часом. Нарешті, можна створити масив об'єктів або систему об'єктів – концептуальну комбінацію даних, що мають структуру, зміст і комплект методів, які «самі по собі» виявляють відповідні властивості.

У всіх випадках інформація представляється жорстко, формально і доступно для обробки засобами мови. Тільки в тому випадку, якщо кодом маніпулює «сама» система об'єктів і не допускається ні однієї конструкції поза методу того чи іншого об'єкта, можна говорити про те, що є шанс обробляти і створювати інформацію, не формалізовану або формализуемую в процесі виконання алгоритму.

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

У першому наближенні jаvascript масив подібний аналогічним синтаксичним конструкціям інших мов. Семантика також еквівалентна, за винятком форм її вираження. Можна використовувати синтаксис і семантику jаvascript і успішно вирішувати будь-яку складну задачу.
Шансів, що буде досягнута повна мобільність коду і адаптація створеного ресурсу до мінливих умов застосування, адекватна реакція на будь-непередбачена зміна вхідної інформації і правил її обробки, немає ніяких, але практично будь-яку задачу, яку здатний поставити сучасний замовник, можна успішно вирішити. Стандарт синтаксису мови, визначає на jаvascript масиви, функції і методи, досить великий, але на практиці зазвичай використовується лише частина.
forEach - самий цікавий метод масиву. jаvascript надає розробнику визначити власну функцію для виконання роботи з кожним елементом масиву. Тут немає поняття 'break', тобто forEach слід розглядати як операцію над усіма елементами масиву.
aData.forEach(function (val, ind, arr) {}); тут 'val' елемент 'ind' - його індекс, а 'arr' - власне масив 'aData'. Функція може виконувати будь-які дії над елементами масиву. Якщо вона буде мати певний сенс, то це буде операцією розробника, а не синтаксисом мови, тобто масив буде мати не лише зміст, але й операції, йому доступні згідно з його призначенням у загальному контексті алгоритму.

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

Використовуючи масив об'єктів jаvascript можна вийти за межі синтаксису. Формально кожна змінна об'єкта і кожна конструкція його методу лежить в межах синтаксису мови, але в контексті об'єктно-орієнтованого програмування виникає системний ефект – нова якість, яке пропонує власний синтаксис: «самостійні» відносини між об'єктами. Класична концепція розробки програм: переклад формального алгоритму в конкретні синтаксичні конструкції мови. В будь-якому місці коду є жорстка зв'язок з тим, що було до цього місця і з тим, що буде після нього.


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

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

Ідеальна та красива конструкція створення масиву: var aData =[]; //по суті завжди масив; var aData = {}; //за змістом, можливо, асоціативний масив; можна написати і більше "інтелігентно": var aData = new Array(); або зовсім уже "закомплексованно": var aData = new Array(13). jаvascript не наполягає на обов'язковій вказівці кількості елементів і не нав'язує жодних правил щодо індексації, розмірів і типів елементів. На цьому простому підставі не рекомендується зловживати своїми правами, обмежуючи їх: всі масиви повинні бути представлені і використані максимально вільним чином.

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

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

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

Системи «завжди одномірні», але будь-яка система складається з внутрішніх підсистем, а сама по собі є частиною чогось більш глобального. Подібно до загальної концепції систем, jаvascript двовимірний масив відсутній, але його легко можна створити, додаючи в якості елементів масиву інші масиви.
Індексація за внутрішнім масивів формується природним чином: «aData[i] [j] [z]» але завжди краще ідея: var aElement = aData[i]; //вибрати внутрішній масив; aElement[j]= ; //використовувати елемент внутрішнього масиву. В jаvascript додати в масив дозволено змінну будь-якого типу і в якому порядку. У внутрішній масив можна також додавати за загальними правилами. Для доступу до елементів можна використовувати послідовність дужок[], але завжди краще виконувати переприсваивание, обмежуючись в кожному виразі тільки однією парою[]. Багатовимірні масиви jаvascript - це нормально, передбачено синтаксисом і цілком можна застосувати на практиці. Але, як і в інших мовах, краще всього, коли вимірювань менше, а читаність коду вище. Програми, звичайно ж, пишуться для комп'ютерів, для інтерпретаторів і компіляторів, але пишуть їх люди, які супроводжують теж люди і чим вище доступність коду для автора і стороннього розробника, тим він практичніше.

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

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

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

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

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

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

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

На відміну від серверних мов, у яких завжди ясно, що обробляти і що повинно бути в результаті, в jаvascript потрібно специфічне багаторівневе мислення. Сторінка сайту може породжувати події та виклики скриптів самим несподіваним чином. Навіть коли технічне завдання на сайт виконано ідеальним чином, а діалог з відвідувачем ніяк не може вийти за встановлені рамки, несподіванки трапляються.
Характерною особливістю jаvascript є те, що елемент сторінки може активувати той чи інший процес. В результаті будуть змінені ті або інші дані, масиви, об'єкти. Інший процес повинен мати уявлення про те, що було змінено. В ідеалі процеси слід розписати по об'єктах і масивів таким чином, щоб будь-яка подія, ініціюючи один процес, зумовлювало все, що необхідно для всіх інших процесів, від нього залежать. Можна не вітати об'єктно-орієнтоване програмування і не прагнути до того, щоб всі сторінки сайту забезпечувалися повнофункціональними системами об'єктів, які самі по собі вступають між собою у відносини і немає жодного рядка коду поза методів таких об'єктів, але навіть у випадку виключно класичного стилю розробки jаvascript масиви, особливо асоціативні і збройні наборами реалізацій функції forEach, - відмінний засіб для надійного і практичного коду.
Цікаво по темі
Обробка рядків. Метод JavaScript replace()
Обробка рядків. Метод JavaScript replace()
Гіпертекст у форматі HTML, CSS, XML, власні варіанти рядкового подання інформації з сервера надходять ...
Ефективне програмування на PHP: масиви в рядок
Ефективне програмування на PHP: масиви в рядок
PHP, як сучасна мова програмування, надає можливість обробляти дані, тип яких можна визначити в момент ...
Javascript Array для збереження необмеженої кількості змінних
Javascript Array для збереження необмеженої кількості змінних
Логічно масив займає проміжне положення між змінними і об'єктами. Практично не слід надавати особливого значення словам. У програмі є змінні і код.
JavaScript: switch case - вибір варіантів
JavaScript: switch case - вибір варіантів
Різноманіття варіантів може бути реалізовано різними способами. Конструкція switch - простий і ефективний спосіб виконати різні дії в залежності від
Java Array. Масиви в Java. Java для початківців
Java Array. Масиви в Java. Java для початківців
Для роботи з великою кількістю значень в Java, як у більшості сучасних високорівневих мов програмування, є такий потужний інструмент, як масиви.
JavaScript: приклади застосування
JavaScript: приклади застосування
jаvascript - сучасна мова програмування, без якого важко створити динамічний сайт, який привертає увагу. JS ідеально справляється з обробкою