Push javascript приклади. Масиви у JavaScript. Завдання для самостійного виконання

З масивами можна працювати у вигляді різних методів, наданих конструктором Array.

Методи pop/push та shift/unshift

Розглянемо методи pop() та push(). Ці методи дозволяють працювати з масивами як зі стеками. Стек - це структура даних, у якій доступом до елементам організований за принципом LIFO (англ. last in - first out, «останнім прийшов - першим пішов»). Принцип роботи стека можна порівняти зі чаркою тарілок: щоб взяти другу зверху, потрібно зняти верхню. Як це працює зображено на малюнку:

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

Var foo =; // foo: foo.push(1,2); // foo: Повертає 2 foo.pop(); // foo: Повертає 2 foo.push (3); // foo: Повертає 2 foo.pop(); // foo: Повертає 3 foo.push(); // foo: ] Повертає 2 foo.pop() // foo: Повертає foo.pop(); // foo: Повертає 1 var fruits = ["груші", "банани", "яблука"]; var picked = fruits.pop(); document.write("Ви зірвали мої" + picked); Спробувати »

Методи shift() і unshift() поводяться багато в чому також, як pop() і push(), за винятком того, що вони вставляють та видаляють елементи на початку масиву. Метод unshift() зміщує існуючі елементи у бік великих індексів для звільнення місця під нові елементи, додає один або кілька елементів початку масиву і повертає нову довжину масиву. Метод shift() видаляє перший елемент масиву і повертає його значення, зміщуючи всі наступні елементи для вільного місця на початку масиву.

Var f =; // f: f.unshift(1); // f: Повертає: 1 f.unshift(22); // f: Повертає: 2 f.shift(); // f: Повертає: 22 f.unshift(3,); // f:,1] Повертає: 3 f.shift(); // f:[,1] Повертає: 3 f.shift(); // f: Повертає f.shift(); // f: Повертає: 1

Метод join

Array.join() використовується для об'єднання елементів масиву в один рядок. Методу можна передати необов'язковий рядковий аргумент, який використовуватиметься для поділу елементів у рядку. Якщо розділювач не заданий, то при викликі методу символом-розділювачем за замовчуванням буде кома.

Var a = ["Вітер", "Дощ", "Вогонь"]; var myVar1 = a.join(); //"Вітер,Дощ,Вогонь" var myVar2 = a.join(", "); //"Вітер, Дощ, Вогонь" var myVar3 = a.join(" + "); //"Вітер + Дощ + Вогонь" document.write(myVar1 + "
" + myVar2 + "
+ myVar3); Спробувати »

Метод Array.join() є зворотним стосовно методу String.split(), який створює масив шляхом розбиття рядка на фрагменти.

Метод reverse

Метод Array.reverse() змінює порядок проходження елементів у масиві на протилежний і повертає масив з переставленими елементами. Цей метод не створює новий масив із переупорядкованими елементами, а переупорядковує їх у вже існуючому масиві.

Var myArr = ["один", "два", "три"]; document.write(myArr.reverse()); Спробувати »

Метод concat

Метод Array.concat() створює та повертає новий масив, що містить елементи вихідного масиву, для якого був викликаний метод concat(), послідовно доповнений значеннями всіх аргументів, переданих методу concat(). Якщо якийсь із цих аргументів сам є масивом, тоді будуть додані всі його елементи. Імена масивів використовуються як аргументи і вказуються в тому порядку, в якому потрібно об'єднати їх елементи.

Var a =; a.concat(4, 5) // Повертає a.concat(); //теж саме - повертає a.concat(,) //Повертає

Метод sort

Метод Array.sort() на місці сортує елементи масиву та повертає відсортований масив. Якщо метод sort() викликається без аргументу, він сортує елементи масиву в алфавітному порядку (тимчасово перетворює в рядки до виконання порівняння). Як аргумент метод sort() може приймати функцію порівняння, яка визначає порядок сортування елементів.

Var a = ["Ківі", "Апельсини", "Груші"]; a.sort(); var s = a.join(", "); //Апельсини, Груші, Ківі document.write(s); //Приклад з числами var myArr = ; myArr.sort(); document.write(myArr); //1,10,2 Спробувати »

Напевно, від сортування чисел ви очікували побачити трохи інший результат. Таке сортування відбулося тому, що метод sort() сортує елементи, перетворюючи їх на рядки. Тому й порядок у них виходить рядковий – адже "10"

Для сортування будь-якому іншому порядку, відмінному від алфавітного, можна передати методу sort() як аргумент функцію порівняння. Проте слід врахувати, що функцію порівняння доведеться писати самим. Ця функція повинна мати два параметри, тому що вона встановлює, який із двох її аргументів повинен бути раніше у відсортованому списку. Щоб було легше розібратися та написати таку функцію, є кілька правил, за якими визначатиметься порядок елементів:

  • Якщо перший аргумент має передувати другому, функція порівняння повертає від'ємне число (якщо a
  • Якщо перший аргумент має слідувати за другим, то функція порівняння повертає позитивне число (якщо a > b)
  • Якщо два значення еквівалентні (тобто порядок їхнього розташування не важливий), функція порівняння повертає 0 (якщо a == b)

Для порівняння своїх аргументів функція використовує елементи масиву:

Function foo(a,b) ( //визначаємо функцію перевірки if (a b) return 1; return 0; //якщо a == b ) var a = ; a.sort(foo); //як аргумент передається лише ім'я функції document.write(a.join(", ")); //теж саме записати коротше var a = ; a.sort(function(a,b) ( //використовуємо анонімну функцію return a - b; //функція повертає значення 0)); document.write(a); //1,2,5,10 Спробувати »

Перший запис у прикладі написано так, щоб було легше зрозуміти, як це працює. Зверніть увагу, наскільки зручно використовувати анонімну функцію у другому фрагменті. Вона викликається лише один раз, тому немає потреби давати їй ім'я.

Якщо в масиві є невизначені елементи (undefined), вони переносяться в кінець масиву.

Метод slice

Метод Array.slice() використовується для копіювання зазначеної ділянки з масиву і повертає новий масив, що містить скопійовані елементи. Вихідний масив у своїй не змінюється.

Синтаксис методу:

Ім'я_масиву.slice(begin, end);

Ім'я_масиву слід замінити ім'ям масиву, з якого потрібно витягти певний набір елементів для нового масиву. Метод приймає два аргументи, які визначають початок і кінець ділянки масиву, що повертається. Метод копіює ділянку масиву, починаючи з begin до end, не включаючи end. Якщо вказано лише один аргумент, масив, що повертається, міститиме всі елементи від зазначеної позиції до кінця масиву. Можна використовувати негативні індекси – вони відраховуються з кінця масиву.

Var arr =; arr.slice(0,3); //Повертає arr.slice(3); //Повертає arr.slice(1,-1); //Повертає arr.slice(-3,-2); //Повертає

Метод splice

Метод Array.splice() – це універсальний метод для роботи з масивами. Він змінює масив на місці, а не повертає новий змінений масив, як це роблять методи slice() та concat(). Метод splice може видаляти елементи з масиву, вставляти нові елементи, замінювати елементи по черзі і одночасно. Він повертає масив, що складається з віддалених елементів, якщо жоден із елементів не був видалений, поверне порожній масив.

Синтаксис методу:

Имя_массива.splice(index , кількість, elem1, ..., elemN);

Перший аргумент вказує індекс у масиві, з якого починається вставка чи видалення елементів. Другий аргумент задає кількість елементів, які повинні бути видалені з масиву, починаючи з індексу, зазначеного в першому аргументі, якщо другий аргумент дорівнює 0, то елементи не будуть видалені. Якщо другий аргумент опущений, видаляються всі елементи масиву, починаючи з зазначеного індексу, до кінця масиву. При використанні негативного номера позиції відлік елементів буде з кінця масиву.

Var fruits = ["апельсини", "яблука", "груші", "виноград"]; var deleted = fruits.splice(2,2); //Повертає ["груші", "виноград"] document.write(deleted); var arr =; arr.splice(4); //Повертає; масив став: arr.splice(1,2); //Повертає; масив став: arr.splice(1,1); //Повертає; масив став: Спробувати »

Перші два аргументи методу splice() задають елементи масиву, що підлягають видаленню. За цими двома аргументами може йти будь-яка кількість додаткових аргументів, що задають елементи, які будуть вставлені в масив, починаючи з позиції, заданої першим аргументом.

Var fruits = ["апельсини", "яблука"]; fruits.splice(2,0, "кавуни"); //Повертає document.write(fruits); //стало ["апельсини", "яблука", "кавуни"] var arr =; arr.splice(2,0, "a", "b"); //Повертає; стало arr.splice(2,2,); //Повертає ["a","b"]; стало ,3,4,5] Спробувати »

Варто звернути увагу, що на відміну від concat() метод splice() не розбиває на окремі елементи масиви, що передаються в якості аргументів. Тобто якщо методу передається масив для вставки, він вставляє сам масив, а не елементи цього масиву.

Метод toString

Метод toString() перетворює елементи масиву в рядок, використовуючи як символ-розділювач кому.

Var arr = ["Молоко", "Хліб", "Печень"]; var food = arr.toString(); document.write(food); / / Молок, Хліб, Печиво Спробувати »

Зверніть увагу, метод повертає той самий рядок, що метод join() при виклику його без аргументів.

indexOf та lastIndexOf

Метод indexOf повертає індекс елемента, значення якого дорівнює значенню, переданому методу як аргумент.

Синтаксис методів indexOf() та lastIndexOf():

ім'я_масиву.indexOf(шуканий_елемент, індекс) ім'я_масиву.lastIndexOf(шуканий_елемент, індекс)

Перший аргумент методу вказує значення елемента, індекс якого потрібно знайти, другий аргумент (необов'язковий), вказує індекс, з якого буде починатися пошук. Якщо однакових входження кілька, вибирається найменший (перший) індекс. Якщо елемент з потрібним значенням не знайдено, метод поверне -1. Усередині методу пошуку використовується суворе порівняння (===).

Var a =; a.indexOf(3); //Поверне 2 a.indexOf(3,4); //Поверне 6 a.indexOf(35); //Поверне -1: немає елемента з таким значенням a.indexOf(2); // 1

Метод lastIndexOf() теж повертає індекс елемента, значення якого дорівнює значенню, переданому методу як аргумент. Різниця лише тому, що метод lastIndexOf() вибирає найбільший (останній) індекс.

Var a =; a.lastIndexOf(3); //Поверне 7 a.lastIndexOf(35); //Поверне -1: немає елемента з таким значенням a.lastIndexOf(2); // 6

Методи ітератори

p align="justify"> Методи, описані нижче, є ітераторами. У всіх сучасних браузерах для роботи з масивами є методи, призначені для перебору елементів та виконання різних дій над ними. Це методи forEach(), map(), filter(), every(), some, reduce() та reduceRight().

Вони перебирають елементи масиву починаючи з 0 до length - 1 і якщо елемент існує, передають його в callback обробник-функцію.

forEach

Синтаксис методу:

Ім'я_масиву.forEach(callback, thisArg)

Як перший аргумент вказується callback-функція, яку метод forEach() буде викликати кожного елемента масиву. Реалізацію функції-обробника, що викликається, потрібно писати самим. Функція, що викликається, повинна мати три параметри: перший параметр приймає як аргумент - значення елемента масиву, другий - індекс елемента, і третій - сам масив. Однак, якщо потрібно використовувати лише значення масиву, можна написати функцію тільки з одним параметром. Другий аргумент - thisArg (необов'язковий) буде передано як значення this.

Var arr =; function foo(value) ( ​​var sum = value * this; return document.write(sum + "
"); ) arr.forEach(foo, 5); //другий аргумент буде передано як значення this //приклад з трьома параметрами var a = ; a.forEach(function(el, idx, a) ( document.write( "a["+idx+"] = "+el+" у ["+a+"]
"); )); Спробувати »

filter

Синтаксис методу:

Ім'я_масиву.filter(callback, thisObject)

Метод filter() створює та повертає новий масив, який міститиме лише ті елементи масиву, для яких виклик функції callback поверне true.

Function isBig(element, index, array) ( //повертає числа, які більші або рівні 10 return (element >= 10); //якщо значення елемента більше або дорівнює 10 - вираз поверне true ) var filtered = .filter(isBig) ; //filtered

map

Метод map() створює та повертає новий масив, який складатиметься з результатів виклику функції callback(item, idx, ar) для кожного елемента масиву.

Var a =; var b = a.map(function(item, idx, arr) ( return item * item; )); // b =

every та some

Метод every() повертає true, якщо для всіх елементів масиву вказана функція, яка використовується для перевірки, поверне true.

Метод some() повертає true, якщо під час перевірки у зазначеній функції один або кілька елементів повернуть true.

Var a =; a.every(function(x) ( return x 10; )) //true: одне число > 10

reduce та reduceRight

Синтаксис методів:

ім'я_масиву.reduce(callback, initialValue) ім'я_масиву.reduceRight(callback, initialValue)

Метод reduce() застосовує зазначену функцію (callback) щодо відразу двох значень масиві, перебираючи елементи зліва направо, зберігаючи у своїй проміжний результат.

Аргументи функції callback: (ПредставляємоВалу, поточнийІм, index, array)

  • previousValue - повертається результат callback функції (він же проміжний результат)
  • currentItem - поточний елемент масиву (елементи перебираються по черзі ліворуч-праворуч)
  • index – індекс поточного елемента
  • array - масив, що обробляється

initialValue (ініціалізуюче значення) - об'єкт, що використовується як перший аргумент першого виклику функції callback. Простіше кажучи, значення попереднього значення при першому виклику дорівнює початковому значення. Якщо початкова значення немає, то воно дорівнює першому елементу масиву, а перебір починається з другого:

Var a =; function foo(prevNum,curNum) ( sum = prevNum + curNum; alert(sum); return sum; ) var result = a.reduce(foo, 0); document.write(result); Спробувати »

Розберемо, як працює цей приклад. Першими аргументами функції foo є:

  • prevNum = 0 (оскільки initialValue - 0)
  • curNum = 1 (поточний елемент - перший елемент масиву)

До 0 додається 1. Цей результат (sum: 1) буде передано як prevNum при наступному запуску функції. І так далі поки що не дійде до останнього елемента. Повернутий результат - сума від останнього запуску, становитиме 15 (1+2+3+4+5).

Метод reduceRight працює аналогічно методу reduce, але йде масивом праворуч-ліворуч:

Var a = ["h", "o", "m", "e"]; function bar(prevStr, curItem) ( return prevStr + curItem; ) document.write(a.reduceRight(bar)); // emoh

У цій статті ми розглянемо стандартні JavaScript масиви із числовими індексами. Масиви оголошуються за допомогою квадратних дужок:

var fruits = ["Apple", "Orange", "Donkey"]

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

var fruits = ["Apple", "Orange", "Donkey"] alert(fruits) alert(fruits) alert(fruits)

Ми також можемо отримати довжину масиву JavaScript :

var fruits = ["Apple", "Orange", "Donkey"] alert(fruits.length)

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

Методи pop та push

Метод pop у JavaScript видаляє елемент масиву та повертає його.

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

var fruits = ["Apple", "Orange", "Donkey"] alert("Я видаляю "+fruits.pop()) // Тепер у нас тільки ["Apple","Orange"] alert("Тепер розмір масиву : "+fruits.length) // осел видалений

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

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

var fruits = ["Apple", "Orange"] fruits.push("Peach"); // тепер ми маємо ["Apple", "Orange", "Peach"] alert("Останній елемент:"+fruits)

  • Створіть масив styles з елементами "Jazz", "Blues";
  • Додати значення "Rock'n'Roll ";
  • Замініть друге значення з кінця значенням "Classic". У вас повинен вийти масив: "Jazz", "Classic", "Rock'n'Roll". Код має працювати для будь-якої довжини масиву;
  • Вийміть останнє значення з масиву та виведіть його через alert.
  • Рішення

    // 1 var styles = ["Jazz", "Bluez"] // 2 styles.push("Rock"n"Roll") // або: styles = "Rock"n"Roll" // 3 styles = "Classic // 4 alert(styles.pop())

    Методи shift/unshift

    Методи shift/unshift працюють з кінцем масиву, але також можна використовувати shift , щоб зрушити елементи вгору (перше значення масиву видаляється зі зсувом елементів ). Метод unshift дозволяє JavaScript додати елемент в масив з кінця:

    var fruits = ["Apple", "Orange"] var apple = fruits.shift() // тепер у нас залишився тільки ["Orange"] fruits.unshift("Lemon") // тепер ми маємо ["Lemon", "Orange"] alert(fruits.length) // 2

    І shift , і unshift можуть працювати з кількома елементами одночасно:

    var fruits = ["Apple"] fruits.push("Orange","Peach") fruits.unshift("Pineapple","Lemon") // тепер масив виглядає так: ["Pineapple", "Lemon", "Apple ", "Orange", "Peach"]

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

    Напишіть код, щоб вивести через alert випадкове значення масиву arr :

    var arr = ["Plum", "Orange", "Donkey", "Carrot", "JavaScript"]

    Примітка: Код для отримання випадкового числа від мінімального до максимального значення (включно) наступний:

    var rand = min + Math.floor(Math.random()*(max+1-min))

    Рішення

    Нам потрібно отримати випадкове число від 0 до arr.length-1 (включно):

    var arr = ["Plum", "Orange", "Donkey", "Carrot", "JavaScript"] var rand = Math.floor(Math.random()*arr.length) alert(arr)

    Перебір масиву

    JavaScript перебір масиву здійснюється за допомогою циклу for :

    var fruits = ["Pineapple", "Lemon", "Apple", "Orange", "Peach"] for(var i=0; i=0 перевірити швидше, ніж i. Що в JavaScript прискорює пошук у масиві.

    Використання length для обрізки масиву

    За допомогою властивості length можна обрізати масив таким чином:

    Ви задаєте довжину і браузер обрізає масив.

    Array є об'єктом, що з цього випливає

    Насправді JavaScript Array - це Object , доповнений автоматичною установкою довжини і спеціальними методами.

    Це відрізняється від концепції в інших мовах, де масиви є безперервним сегментом пам'яті. Це також відрізняється від черги чи стека на основі пов'язаних списків.

    Нечислові ключі масиву

    Ключі – це числа, але вони можуть мати будь-які імена:

    arr = arr = 5 arr.prop = 10 // не робіть так

    У JavaScript масиви є хеш-таблиці з їх перевагами в плані продуктивності, але і з певними недоліками.

    Наприклад, push/pop працюють лише з крайніми елементами масиву, тому вони неймовірно швидкі.

    push працює тільки з кінцем:

    var arr = ["My", "array"] arr.push("something") alert(arr) // рядок "array"

    Методи shift/unshift повільні, тому що потрібно змінити нумерацію всього масиву. Метод splice також може призвести до зміни нумерації:

    Таким чином, shift/unshift працюють повільніше, ніж push/pop. Чим більше масив, тим більше часу займає JavaScript сортування масиву.

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

    Який результат? Чому?

    arr = ["a", "b"] arr.push(function() ( alert(this) )) arr() // ?

    Рішення

    Оскільки масиви є об'єктами, arr ..фактично є викликом методу об'єкта, таким як obj метод:

    arr() // те саме що arr() // синтаксично це неправильно, але концептуально те саме: arr.2() // переписане в тому ж стилі, що і obj.method() this = arr в такому випадку передається функції, тому виводиться вміст arr. arr = ["a", "b"] arr.push(function() ( alert(this) )) arr() // "a","b",функція

    Розріджені масиви, опис length

    Властивість length дозволяє отримати не розмір масиву JavaScript , а останній індекс + 1 . Це важливо, якщо йдеться про розріджені масиви, з «проміжками» в індексах.

    У наступному прикладі ми додамо два елементи в порожні fruits, але значення length залишиться 100:

    var fruits = // порожній масив fruits = "Peach" fruits = "Apple" alert(fruits.length) // 100 (але елементів у масиві всього 2)

    Якщо ви спробуєте вивести розріджений масив, браузер видасть значення пропущених індексів як порожні елементи:

    var fruits = // порожній масив fruits = "Peach" fruits = "Apple" alert(fruits) // ,Peach,Apple (або щось на зразок цього)

    Але масив – це об'єкт із двома ключами. Відсутні значення не займають місця.

    Розріджені масиви поводяться химерно, коли до них застосовуються методи масиву. Вони не мають уявлення про те, що індекси пропущені:

    var fruits = fruits = "Peach" fruits = "Apple" alert(fruits.pop()) // виштовхуємо "Apple" (на індекс 9) alert(fruits.pop()) // виштовхуємо не заданий елемент (на індекс 8 )

    Намагайтеся уникати розріджених масивів. У всякому разі, їх методи не працюватимуть нормально. Натомість використовуйте Object .

    Видалення з масиву

    Як ми знаємо, масиви – це об'єкти, тому ми могли б використовувати delete, щоб видалити значення:

    var arr = ["Go", "to", "home"] delete arr // тепер arr = ["Go", undefined, "home"] alert(arr) // не встановлено

    Ви бачите, що значення видаляється, але не так, як ми хотіли б, тому що масив містить незаданий елемент.

    Оператор delete видаляє пару ключ-значення, і це все. Звичайно, так як масив - це тільки хеш, позиція віддаленого елемента стає undefined.

    Найчастіше нам потрібно видалити елемент, не залишаючи дір між індексами. Існує ще один метод, який допоможе нам у цьому.

    Метод splice

    Метод splice може видаляти елементи та замінювати їх у JavaScript багатовимірних масивах. Його синтаксис:

    arr.splice(index, deleteCount[, elem1, ..., elemN])

    Видаляє елемент deleteCount , починаючи з index , а потім вставляє його місце elem1, …, elemN .

    Давайте розглянемо кілька прикладів:

    var arr = ["Go", "to", "home"] arr.splice(1, 1) // видалити 1 елемент, починаючи з індексу 1 alert(arr.join(",")) // ["Go ", "home"] (1 елемент видалено)

    Таким чином, ви можете використовувати splice, щоб видалити один елемент з масиву. Номери елементів масиву зсуваються, щоб заповнити пропуск:

    var arr = ["Go", "to", "home"] arr.splice(0, 1) // видаляємо 1 елемент, починаючи з індексу 0 alert(arr) // "to" став першим елементом

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

    Метод splice повертає масив віддалених елементів:

    var arr = ["Go", "to", "home", "now"]; // видаляємо 2 перші елементи var removed = arr.splice(0, 2) alert(removed) // "Go", "to" = 0; i--) ( if (c[i] == cls) c.splice(i,1) ) elem.className = c.join(" ") ) var obj = ( className: "open menu" ) removeClass(obj , "open") removeClass(obj, "blabla") alert(obj.className) // menu

    У наведеному прикладі змінна c задана на початку циклу, і для i заданий її останній індекс.

    Сам цикл виконується у зворотному напрямку, закінчуючись умовою i>=0. Це зроблено тому, що i>=0 перевіряється швидше, ніж i. Що прискорює пошук властивості c .

    Метод slice

    Можна витягти частину масиву з допомогою методу slice(begin[, end]): var arr = ["Why", "learn", "JavaScript"]; var arr2 = arr.slice(0,2) // приймає 2 елементи, починаючи з 0 alert(arr2.join(", ")) // "Why, learn"

    Зверніть увагу, що цей метод не змінює JavaScript кількість елементів в масиві, а копіює його частину.

    Можна опустити другий аргумент, щоб отримати всі елементи, починаючи з певного індексу:

    var arr = ["Why", "learn", "JavaScript"]; var arr2 = arr.slice(1) // приймає всі елементи, починаючи з 1 alert(arr2.join(", ")) // "learn, JavaScript"

    Метод підтримує негативні індекси, як і, як String#slice .

    Метод reverse

    Ще один корисний метод – reverse. Припустимо, я хочу отримати останню частину домену, наприклад, “com” від “my.site.com”. Ось як це можна зробити:

    var domain = "my.site.com" var last = domain.split(".").reverse() alert(last)

    Зауважте, що JavaScript масиви підтримують складний синтаксис (reverse()) для виклику методу, а потім вилучення елемента з отриманого масиву.

    Ви можете створювати довгі дзвінки, наприклад, reverse() 0] arr.sort() alert(arr) // 1, 15, 2

    Запустіть наведений вище код. Ви отримаєте порядок 1, 15, 2. Це тому, що метод перетворює все на рядок і використовує за умовчанням лексикографічний порядок.

    Масиви

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

    Відлік індексів масивів у мові JavaScript починається з нуля і для них використовуються 32-бітові цілі числа - перший елемент масиву має індекс 0. Масиви JavaScript є динамічними: вони можуть збільшуватися і зменшуватися в розмірах при необхідності; немає необхідності оголошувати фіксовані розміри масивів за її створенні чи повторно розподіляти пам'ять за зміни їх розмірів.

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

    Створення масивів

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

    Var empty =; // Порожній масив var numbers =; // Масив із п'ятьма числовими елементами var misc = [ 1.1, true, "a", ]; // 3 елементи різних типів + завершальна кома var base = 1024; var table =; // Масив зі змінними var arrObj = [,]; // 2 масиви всередині, що містять об'єкти

    Синтаксис літералів масивів дозволяє вставляти необов'язкову завершальну кому, тобто. літерал [,] відповідає масиву з двома елементами, а не з трьома.

    Інший спосіб створення масиву полягає у виклику конструктора Array(). Викликати конструктор можна трьома різними способами:

      Викликати конструктор без аргументів:

      Var arr = новий Array();

      У цьому випадку буде створено порожній масив, еквівалентний літералу.

      Викликати конструктор з числовим аргументом, визначальним довжину масиву:

      Var arr = новий Array (10);

      І тут буде створено порожній масив зазначеної довжини. Така форма виклику конструктора Array() може використовуватися для попереднього розподілу пам'яті під масив, якщо відомо кількість його елементів заздалегідь. Зверніть увагу, що при цьому в масиві не зберігається жодних значень.

      Явно вказати у виклику конструктора значення перших двох або більше елементів масиву або один нечисловий елемент:

      Var arr = New Array (5, 4, 3, 2, 1, "тест");

      І тут аргументи конструктора стають значеннями елементів нового масиву. Використання літералів масивів практично завжди простіше, ніж застосування конструктора Array().

    Читання та запис елементів масиву

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

    // Створити масив із одним елементом var arr = ["world"]; // Прочитати елемент 0 var value = arr; // Записати значення елемент 1 arr = 3.14; // Записати значення елемент 2 i = 2; arr[i] = 3; // Записати значення елемент 3 arr = " привіт " ; // Прочитати елементи 0 і 2, записати значення елемент 3 arr] = arr;

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

    У перетворенні числових індексів у рядки немає нічого особливого: те саме можна робити зі звичайними об'єктами:

    Var obj = (); // Створити простий об'єкт obj = "one"; // Індексувати його цілими числами

    Особливість масивів у тому, що з використанні імен властивостей, які є неотрицательными цілими числами, масиви автоматично визначають значення властивості length . Наприклад, вище було створено масив arr із єдиним елементом. Потім було присвоєно значення його елементам з індексами 1, 2 і 3. В результаті цих операцій значення властивості length масиву змінилося і дорівнювало 4.

    Слід чітко відрізняти індекси у масиві від імен властивостей об'єктів. Усі індекси є іменами властивостей, але лише властивості з іменами, представленими цілими числами є індексами. Всі масиви є об'єктами, і ви можете додавати до них властивості будь-яких імен. Однак якщо ви торкаєтеся властивостей, які є індексами масиву, масиви реагують на це, оновлюючи значення властивості length при необхідності.

    Зверніть увагу, що як індекс масивів допускається використовувати негативні і не цілі числа. У цьому випадку числа перетворюються на рядки, які використовуються як імена властивостей.

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

    Ми вже бачили, що найпростіший спосіб додати елементи до масиву полягає в тому, щоб привласнити значення новим індексам. Для додавання одного або більше елементів в кінець масиву можна використовувати метод push() :

    Var arr =; // Створити порожній масив arr.push("zero"); // Додати значення наприкінці arr.push("one",2); // Додати ще два значення

    Додати елемент у кінець масиву можна також, надавши значення елементу arr. Для вставки елемента в початок масиву можна використовувати метод unshift() , при цьому існуючі елементи масиву зміщуються в позиції з вищими індексами.

    Видаляти елементи масиву можна за допомогою оператора delete як звичайні властивості об'єктів:

    Var arr =; delete arr; 2 in arr; // false, індекс 2 у масиві не визначено arr.length; // 3: оператор delete не змінює властивість length масиву

    Видалення елемента нагадує (але дещо відрізняється) привласнення значення undefined цьому елементу. Зверніть увагу, що застосування оператора delete до елемента масиву не змінює значення властивості length і не зсуває вниз елементи з вищими індексами, щоб заповнити порожнечу після видалення елемента.

    Крім того, є можливість видаляти елементи в кінці масиву простим привласненням нового значення властивості length. Масиви мають метод pop() (протилежний методу push()), який зменшує довжину масиву на 1 і повертає значення віддаленого елемента. Також є метод shift() (протилежний методу unshift()), який видаляє елемент на початку масиву. На відміну від оператора delete, метод shift() зрушує всі елементи вниз на позицію нижче їх поточних індексів.

    Нарешті існує багатоцільовий метод splice() , що дозволяє вставляти, видаляти та заміщати елементи масивів. Він змінює значення властивості length і зсуває елементи масиву з нижчими або високими індексами в міру потреби. Всі ці методи ми розберемо трохи згодом.

    Багатовимірні масиви

    JavaScript не підтримує "справжні" багатовимірні масиви, але дозволяє непогано імітувати їх за допомогою масивів з масивів. Для доступу до елемента даних у масиві масивів достатньо двічі використовувати оператор.

    Наприклад, припустимо, що змінна matrix – це масив масивів чисел. Кожен елемент matrix [x] – це масив чисел. Для доступу до певного числа масиві можна використовувати вираз matrix[x][y]. Нижче наводиться конкретний приклад, де двовимірний масив використовується як таблиця множення:

    // Створити багатовимірний масив var table = new Array (10); // У таблиці 10 рядків for(var i = 0; i

    Методи класу Array

    Стандарт ECMAScript 3 визначає у складі Array.prototype безліч зручних функцій для роботи з масивами, які доступні як методи будь-якого масиву. Ці методи будуть представлені у наступних підрозділах.

    Метод join()

    Метод Array.join() перетворює всі елементи масиву в рядки, об'єднує їх і повертає рядок, що вийшов. У необов'язковому аргументі методу можна передати рядок, який буде використовуватися для відокремлення елементів у рядку результату. Якщо рядок-розділювач не вказано, використовується кома. Наприклад, наступний фрагмент дає в результаті рядок "1,2,3":

    Var arr =; arr.join(); // "1,2,3" arr.join("-"); // "1-2-3"

    Метод reverse()

    Метод Array.reverse() змінює порядок проходження елементів у масиві на зворотний і повертає переупорядкований масив. Перестановка виконується у вихідному масиві, тобто. цей метод не створює новий масив із переупорядкованими елементами, а переупорядковує їх у вже існуючому масиві. Наприклад, наступний фрагмент, де використовуються методи reverse() та join(), дає в результаті рядок "3,2,1":

    Var arr =; arr.reverse().join(); // "3,2,1"

    Метод sort()

    Метод Array.sort() сортує елементи у вихідному масиві та повертає відсортований масив. Якщо метод sort() викликається без аргументів, сортування виконується в алфавітному порядку (для порівняння елементи тимчасово перетворюються на рядки, якщо це необхідно). Невизначені елементи переносяться на кінець масиву.

    Для сортування в будь-якому іншому порядку, відмінному від алфавітного, методу sort() можна передати функцію порівняння як аргумент. Ця функція встановлює, який із двох її аргументів має йти раніше у відсортованому списку. Якщо перший аргумент має передувати другому, функція порівняння має повертати негативне число. Якщо перший аргумент повинен слідувати за другим у відсортованому масиві, то функція повинна повертати число більше за нуль. А якщо два значення еквівалентні (тобто порядок їхнього слідування не важливий), функція порівняння повинна повертати 0:

    Var arr =; arr.sort(); // Алфавітний порядок: 1111, 222, 33, 4 arr.sort(function(a,b) ( // Числовий порядок: 4, 33, 222, 1111 return a-b; // Повертає значення 0 // залежно від порядку сортування a і b)); // Сортуємо у зворотному напрямку, від більшого до меншого arr.sort (function (a, b) (return b-a));

    Зверніть увагу, наскільки зручно використовувати у цьому фрагменті неназвану функцію. Функція порівняння використовується лише тут, тому немає потреби давати їй ім'я.

    Метод concat()

    Array.concat() створює і повертає новий масив, що містить елементи вихідного масиву, для якого був викликаний метод concat(), і значення всіх аргументів, переданих методу concat(). Якщо якийсь із цих аргументів сам є масивом, його елементи додаються в масив, що повертається. Слід, однак, відзначити, що рекурсивного перетворення масиву з масивів на одновимірний масив не відбувається. Метод concat() не змінює вихідний масив. Нижче наведено кілька прикладів:

    Var arr =; arr.concat(4, 5); // Поверне arr.concat(); // Поверне arr.concat(,) // Поверне arr.concat(4, ]) // Поверне ]

    Метод slice()

    Метод Array.slice() повертає фрагмент, або підмасив зазначеного масиву. Два аргументи методу визначають початок і кінець фрагмента, що повертається. Масив, що повертається, містить елемент, номер якого вказаний у першому аргументі, плюс всі наступні елементи, аж до (але не включаючи) елемента, номер якого вказаний у другому аргументі.

    Якщо вказано лише один аргумент, масив, що повертається, містить всі елементи від початкової позиції до кінця масиву. Якщо якийсь із аргументів має негативне значення, він визначає номер елемента щодо кінця масиву. Так, аргумент -1 відповідає останній елемент масиву, а аргумент -3 - третій елемент масиву з кінця. Ось кілька прикладів:

    Var arr =; arr.slice(0,3); // Поверне arr.slice (3); // Поверне arr.slice (1,-1); // Поверне arr.slice(-3,-2); // Поверне

    Метод splice()

    Array.splice() - це універсальний метод, що виконує вставку або видалення елементів масиву. На відміну від методів slice() та concat(), метод splice() змінює вихідний масив, щодо якого він був викликаний. Зверніть увагу, що методи splice() і slice() мають дуже схожі імена, але виконують різні операції.

    Метод splice() може видаляти елементи з масиву, вставляти нові елементи або виконувати обидві операції одночасно. Елементи масиву при необхідності зміщуються, щоб після вставки або видалення утворювалася безперервна послідовність.

    Перший аргумент методу splice() визначає позицію в масиві, починаючи з якої виконуватиметься вставка та/або видалення. Другий аргумент визначає кількість елементів, які мають бути видалені (вирізані) з масиву. Якщо другий аргумент опущений, всі елементи масиву видаляються від зазначеного до кінця масиву. Метод splice() повертає масив віддалених елементів або (якщо жоден з елементів не було видалено) порожній масив.

    Перші два аргументи методу splice() визначають елементи масиву, що підлягають видаленню. За цими аргументами може йти будь-яка кількість додаткових аргументів, що визначають елементи, які будуть вставлені в масив, починаючи з позиції, зазначеної в першому аргументі.

    Var arr =; arr.splice(4); // Поверне, arr = arr.splice (1,2); // Поверне, arr = arr.splice(1,1); // Поверне; arr = arr =; arr.splice(2,0, "a", "b"); // Поверне; arr =

    Методи push() та pop()

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

    Методи unshift() та shift()

    Методи unshift() і shift() поводяться майже так, як push() і pop(), за винятком того, що вони вставляють і видаляють елементи на початку масиву, а не в кінці. Метод unshift() зміщує існуючі елементи у бік великих індексів для звільнення місця, додає елемент або елементи на початок масиву і повертає нову довжину масиву. Метод shift() видаляє та повертає перший елемент масиву, зміщуючи всі наступні елементи на одну позицію вниз, щоб зайняти місце, що звільнилося на початку масиву.

    У JavaScript. Тут ми продовжимо знайомство з Масивами. Поговоримо про властивість length - як дізнатися: скільки елементів містить Масив?

    Навчимося додавати елементи на початок і кінець Масиву - це методи unshift і push відповідно.

    А також за допомогою методів shift та pop зможемо видалити елементи також з початку та кінця Масиву!

    По суті, Масив - це якийсь об'єкт, що складається із певної кількості різних елементів.

    Властивість length дозволять дізнатися кількість елементів у Массіві.

    Для прикладу давайте візьмемо Масив сім днів тижня знайомий нам за минулою темою.

    var days = ["Пон." , "Вт.";

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

    array.length - такий код дає нам кількість елементів Масиву (де array - ім'я Масиву) .

    var days = ["Пон." , "Вт.", "Ср.", "Чт.", "П'ят.", "Суб.", "Нд."];

    var count = days .length;

    document .write (count);

    Таким чином, у змінну count ми помістили число, що дорівнює кількості елементів Масиву.

    Ось так працює властивість length.

    Метод push - додає елемент до кінця Масиву .

    Для того щоб почати роботу з методами додавання елементів, потрібно створити будь-який Масив.

    Нижче я створив Масив «Друзі» - friends.

    , "В'ячеслав", "Олексій"];

    Зараз нам необхідно додати елемент, тобто ще одне Ім'я наприкінці Масиву.

    Для цього існує метод push – він додає елемент у кінець Масиву. Це виглядає так:

    , "В'ячеслав", "Олексій"];

    friends .push ("Яків"); /*Додаємо елемент у кінець Масиву*/

    document .write ( + friends .length );

    document .write ("

    " + friends ); /*Виводимо весь Масив*/

    document .write ("

    " + friends ); /*Виводимо останній 5-ий елемент Масиву*/

    Настя, Григорій, В'ячеслав, Олексій, Яків

    Яків

    Для перевірки роботи методу push у прикладі вище, ми вивели кількість елементів Масиву friends за допомогою властивості length - їх стало 5. Потім вивели весь Масив friends , а також останній елемент Масиву .

    Тепер Ви можете самі переконатися, що елемент додано до кінця Масиву!

    Метод unshift - додає елемент на початок Масиву.

    Тут ми знову звернемося до Масиву friends.

    var friends = ["Настя", "Григорій", "В'ячеслав", "Олексій"];

    Тепер нам потрібно додати елемент на початок Масиву. Для цього існує метод unshift.

    var friends = ["Настя", "Грігорій", "В'ячеслав", "Олексій"];

    friends .unshift ("Борис"); /*Додаємо елемент на початок Масиву*/

    document .write ("Кількість елементів у Массіві дорівнює" + friends .length);

    document .write ("

    " + friends ); /*Виводимо весь Масив*/

    document .write ("

    " + friends ); /*Виводимо перший елемент Масиву*/

    Кількість елементів у Массіві дорівнює 5

    Борис, Настя, Григорій, В'ячеслав, Олексій

    Борис

    Для перевірки роботи методу unshift ми вивели кількість елементів Масиву friends за допомогою властивості length, потім вивели весь Масив friends, а також перший елемент Масиву (нагадуємо, що нумерація елементів Масиву починається з 0) .

    Тепер, як бачите, елемент доданий на початок Масиву!

    Метод pop-видаляє останній елемент з Масиву.

    І знову працюємо з Масивом «Друзі»

    var friends = ["Настя", "Григорій", "В'ячеслав", "Олексій"];

    Використовуючи метод pop-видаляємо останній елемент з Масиву:

    var friends = ["Настя", "Грігорій", "В'ячеслав", "Олексій"];

    friends .pop(); /*Видаляємо останній елемент з Масиву*/

    document .write ("Кількість елементів у Массіві дорівнює" + friends .length);

    document .write ("

    " + friends ); /*Виводимо весь Масив*/

    document .write ("

    + + friends ); /*Виводимо останній елемент Масиву. Для цього беремо загальну кількість елементів Масиву - friends.length і, так як, нумерація в масиві починається з нуля, то з цього числа віднімаємо 1*/

    Настя, Григорій, В'ячеслав

    В'ячеслав

    Для наочності роботи методу pop ми знову вивели кількість елементів Масиву за допомогою властивості length, потім вивели весь Масив friends – вже без віддаленого останнього елемента.

    А також вивели останній елемент масиву, що знову вийшов. . Для виведення останнього елемента, скориставшись властивістю length, ми взяли загальну кількість елементів, що залишилися в Массіві (3) і відняли з нього 1. Таким чином, ми вивели останній елемент масиву під номером 2. Але це третій елемент, так як нумерація в Массіві починається з 0!

    Метод shift - видаляє перший елемент з Масиву.

    Перед нами, як і раніше, Масивом «Друзі»

    var friends = ["Настя", "Григорій", "В'ячеслав", "Олексій"];

    За допомогою методу shift - видаляємо перший елемент з Масиву:

    var friends = ["Настя", "Грігорій", "В'ячеслав", "Олексій"];

    friends .shift(); /*Видаляємо перший елемент з Масиву*/

    document .write ("Кількість елементів у Массіві дорівнює" + friends .length);

    document .write ("

    " + friends ); /*Виводимо весь Масив*/

    document .write ("

    " + friends ); /*Виводимо перший елемент Масиву.*/

    Кількість елементів у Массіві дорівнює 3

    Григорій, В'ячеслав, Олексій

    Григорій

    І, нарешті, для перевірки роботи методу shift ми вивели кількість елементів масиву, що знову вийшов, за допомогою властивості length , потім вивели весь Масив friends - вже без віддаленого першого елемента.

    А також вивели перший елемент Масиву . Нумерація в Массіві починається з 0!

    Нагадаю для Вас та для себе один цікавий момент цієї статті!

    Щоб дізнатися номер/індекс останнього елемента Масиву, потрібно з його елементів (тобто з)Відняти одиницю!

    Ми вже працювали з цим у пункті теми.

    Хорошим варіантом ілюстрації цього моменту буде продовження прикладу з пункту теми, де ми розглядали Масив сім днів тижня.

    var days = ["Пон." , "Вт.", "Ср.", "Чт.", "П'ят.", "Суб.", "Нд."];

    var count = days .length; /*Створюємо змінну count у яку заносимо число елементів Масиву days*/

    document .write ("Кількість елементів у Массіві days дорівнює" + count);

    document .write ("

    Номером останнього елемента Масиву days є число + (count - 1));

    Кількість елементів у Массіві days дорівнює 7

    Номером останнього елемента Масиву є 6

    Отже, цим прикладом ми заодно ще раз наголосили на тому факті, що нумерація в Массіві починається з 0 . І, як видно з цього прикладу, номером 7 елемента масиву є число 6.

    Наприкінці цієї теми виконаємо домашнє завдання. І знову спробуйте вирішити його самостійно.

    Домашнє завдання з видалення з... і додавання елементів в Масив Javascript має такий зміст:

    1. Створіть масив із фруктами: апельсин, банан, груша.
    2. Виведіть на екран, скільки зараз у вас фруктів у масиві.
    3. За допомогою методів, вивчених у попередньому уроці, додайте в кінець масиву два фрукти – яблуко та ананас, а на початок масиву – грейпфрут.
    4. Виведіть на екран, скільки зараз у вас фруктів у масиві.
    5. За допомогою методів, вивчених у попередньому уроці, видаліть із масиву останній та перший елемент.
    6. Виведіть на екран, скільки зараз у вас фруктів у масиві.

    var fruit = ["Апельсин", "Банан", "Груша"];
    document .write (fruit + "

    " )
    document .write ("Зараз у моєму кошику" + fruit.length + "фрукта" + "

    fruit .push ("Яблуко", "Ананас"); // Додаємо елементи в КІНЕЦЬ масиву
    fruit .unshift ( " Грейпфрут " ); // Додаємо елементи в ПОЧАТОК масиву
    document .write (fruit + "

    " )
    document .write ("Зараз у моєму кошику" + fruit.length + "фруктів" + "

    fruit .pop(); // Видаляємо ОСТАННІЙ елемент з Масиву
    fruit .shift(); // Видаляємо ПЕРШИЙ елемент з Масиву
    document .write (fruit + "

    " )
    document .write ("Зараз у моєму кошику" + fruit.length + "фрукта");

    Апельсин, Банан, Груша

    Зараз у моєму кошику 3 фрукти

    Грейпфрут, Апельсин, Банан, Груша, Яблуко, Ананас

    Зараз у моєму кошику 6 фруктів

    Апельсин, Банан, Груша, Яблуко

    Зараз у моєму кошику 4 фрукти

    Стек дозволяє віднести до даних історію зміни значень змінних. Опис даних та алгоритмів лежить в основі програмування. Стек - це основа передачі управління між функціями, організації рекурсії і посилань на параметри. Синтаксис та семантика JavaScript за допомогою методів масиву push() та pop() дають можливість маніпулювати змістом та враховувати фактор часу. Особливість мови браузера та її логіка дозволяють інакше подивитись можливості чинника часу.

    Масив даних та логіка його утворення

    Просто описати змінну. Нескладно створити масив змінних. Алгоритм, який використовує дані, - це статичне та просте вирішення задачі. Класична робота з даними:

    • описати (створити) змінну;
    • присвоїти значення;
    • змінити значення;
    • видалити змінну.

    Функції push() та pop() дозволяють змінити сутність змінних та їх використання. Ідея стека не змінилася з моменту її «народження», але особливість JS як мови браузера та сучасної концепції програмування дозволяє врахувати фактор часу та надати даним динаміку.

    Функція value") - додати щось у кінець масиву. Функція - витягти останній елемент масиву. Вказівник у контексті push/pop при додаванні переміщається на доданий елемент, при вилученні - на передостанній елемент, а останній елемент є результатом виконання операції.

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

    Рух за значеннями

    Суть стека – прийшов останнім, пішов першим. Не можна отримати значення поза цим порядком. Строго дотримуючись цього правила, розглядаючи значення всього масиву як одну змінну, можна отримати динаміку зміни значень цієї змінної у часі.

    У цьому прикладі додавання значень JS array.push(...) - одна послідовність дій, вилучення значень JS array pop() - інша послідовність. Обидва варіанти дій взаємопов'язані. Це означає, що активний елемент змінює своє значення не лише за часом, а й за логікою своєї зміни.

    Рекурсія та динаміка значення

    Якщо функція може викликати себе і безпечно виконати своє призначення - це повна функціональність. Простий приклад – таблиця. У таблиці можуть бути інші таблиці. А кожна таблиця - це рядки, стовпці та осередки. Кожен осередок може містити таблицю. Декілька осередків по рядку або стовпцю можуть бути об'єднані в одну комірку, в якій може знаходитися таблиця. У таблиці, що знаходиться в комірці, може бути комірка з двома та більше таблицями.

    Реалізувати сказане у класичному стилі програмування практично неможливо, але у рекурсивному – елементарно. Якщо функціональність алгоритму роботи з таблицею дозволяє реалізувати себе всередині будь-якого осередку - це JS array push. На JavaScript цей «фокус» має особливе значення. Таблиці - це користувальницьке застосування. Дерево сторінки (DOM) – це робота на сторінці.

    На елементах DOM (тегах сторінки) висять обробники. Один варіант, коли такий обробник спрацьовує один раз, зовсім інший варіант, коли може викликати сам себе багато разів. У розрізі всіх обробників всіх елементів сторінки виходить динаміка сторінки у часі.

    Push/pop та рекурсія - це дещо інше уявлення про логіку роботи сторінки: все змінюється так, як потрібно у поточній ситуації, а не програмується заздалегідь у вигляді послідовного відпрацювання дій відвідувача.