Набори, колекції

Не все то масив, що багато.

Виведіть в консоль наступні об'єкти, дослідіть їх:

let p = document.getElementsByTagName('p'),
    h2 = document.getElementsByClassName('arr-test');
console.dir([]);
console.dir(p);
console.dir(h2[0].classList);

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

Повний набір методів мають лише повноцінні масиви та об'єкти, створені з масивів.

Перевіряйте прототипи елементів, щоб з'ясувати - чи можна до них застосувати той чи інший метод.

З любого набора, колекції можна створити масив, для того, щоб скористатися методами масива:

let p = document.getElementsByTagName('p'),
    pa = [];
for (let i = 0; i < p.length; i++) {
  pa.push(p[i]);
}

Виведіть повідомлення який саме об'єкт передано в функцію: масив чи об'єкт.

let a = []
    b = {};
console.log(typeof a);
console.log(typeof b);
fun(a);
fun(b);

function fun(n) {
  if ( ... ) {
    alert('Масив');
  } else {
    alert('Об\'єкт');
  }
}

Домашнє завдання

  1. Створити масиви і вивести їх в консоль:
    - з 20 випадкових дробових чисел від 0 до 1;
    - з 30 випадкових цілих чисел від 1 до 100;
    - з трьох строк тексту випадкової довжини від 8 до 16 символів;
    - з 6-и чисел, що відповідають кодам символів строки "Hello!"
  2. Створіть циклом масив з цифр [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024].
    Спробуйте створити цей масив використовуючи тільки лічильник, без додаткових змінних.
  3. Створити двовимірний масив 10х10 випадкових чисел від 1 до 10.
    Підрахувати: середнє значення всіх цифр, мінімальне та максимальне значення сумм цифр у колонках і рядках.
  4. Перевірте, що ваша функція, яка видає випадкове число від 50 до 100, працює правильно: викличте її 50 мільйонів разів та переконайтеся, що кожне число випало приблизно 1 мільйон разів.
    Особливу увагу приділіть першому та останньому числу (50 та 100).
    Строго кажучи, в даному випадку вірогідність випадання кожного числа - 980 тисяч, оскільки в проміжку [50..100] є 51 число і 50 млн. / 51 = 0,98 млн.
  5. Створіть циклом масив з 5 трійок. Змініть перший елемент на пустий масив, а другий - на слово "ківі".
    Додайте 7-й елемент, виведіть масив в консоль.
    Ініціалізуйте 6-й елемент підмасивом з 5 трійок найоптимальнішим способом.
    Результат виведіть в консоль.
  6. Дано масив чисел: [5, 10, 15, 7, 9, 12, 4, 2, 1] Виведіть в консоль масив посортований в прямому та зворотньому порядку не застосовуючи метод .reverse().
    Створіть масив строк кольорів райдуги, посортуйте їх у прямому та зворотньому напрямку.
  7. Прграмно створіть двовимірний масив mAs 3*3 заповнений числами - результатом множення номера рядка на номер колонки (комірки).
    В другий рядок добавте на початок 5, а в кінець - 7.
    Переберіть масив методом forEach, виведіть в консоль матрицю з цифр 0 чи 1 в залежності від того - непарне чи парне число.
    Виведіть в консоль.
    З першого рядка вилучіть та збережіть у змінну останній елемент, а з третього рядка - другий елемент.
    З середнього рядка вилучіть другий елемент і замініть його двома новими елементами, які ви вилучили перед цими.
    В консоль виведіть масив, а також добуток третього вилученого елемента з дргим елементом, який піднятий до степеня першого елемента.
  8. Створіть масив строк з обласних центрів України. Посортуйте їх в прямому порядку по другій літері, в зворотньому напрямку - по останній, результати виведіть в консоль.
  9. Задано масив: [7, 2, "35", 1, 16, 8, "html", 's', 99] Потрібно:
    - видалити з масива строкові дані (пошук строкових значень здійснити програмно);
    - добавити числа 5 і 40;
    - відсортувати масив за зростанням;
    - вивести результат в консоль.
  10. Дано 2 масива з 5 елементів кожен, в яких знаходяться строкові значення кольорів (виберіть довільні, але щоб не дублювалися на одних і тих же місцях в обох масивах).
    В html створіть список <ul id="list"> з п'ятьох елементів, з іменами героїв вашого улюбленого телешоу, серіалу, улюблених страв...
    Програмно добавте нумерацію рядків до списка і крапку з комою - в кінці рядка: 1) Minecraft;
    2) Counter Strike;
    ...
    Спробуйте зробити, щоб останній пункт закінчувався крапкою.
    Доступ до елементів списку здійсніть так: let li = document.getElementById('list').children; Пофарбуйте колір тексту елементів списку у кольори з першого масиву, а бекграунди задайте кольорами з другого масиву: element.style.color = "green";
    element.style.backgroundColor = "white";
    Добавте ще елементів у список та модифікуйте скрипт, щоб він циклічно зафарбовував елементи (достатньо мінімальних змін).
  11. Створити 3-вимірний масив 4*4*4 елементів, записати в нього перші 64 простих чисел, починаючи з 13.
    Функцію пошуку простих чисел постарайтесь оптимізувати, щоб вона не перевіряла парні числа, і ті, що діляться на 3 та 5.

Додаткові завдання.

  1. На сайті зареєструвалися юзери в такій послідовності: Татарчук
    Їжачкова
    Гаврилюк
    Оберман
    SирeгНаɔkǝг
    Саксаганський
    Миловська
    Аніськов
    Єфремов
    Стробольський
    Ґрант
    Кацман
    Ступова
    Шамінська
    Вороний
    Ігнатьєва
    Сервер присилає список користувачів у вигляді масиву в порядку їх реєстрації (по ідентифікатору в базі даних).
    Відображенням результату на клієнті займається функція userTable(a), що приймає в себе масив.
    Підкогуйте масив, відсортувавши імена по алфавіту.
  2. Переберіть всіх користувачів та виводьте в консоль кожне прізвище, в якому є м'який знак.
  3. Знайдіть серед користувачів першу, у якої прізвище закінчується на ова, єва, ка, запишіть її прізвище у змінну, щоб роздрукувати у запиті СБУ.
    Знайдіть індекс користувача з прізвищем на букву С, сьогодні акція, йому на рахунок треба зачислити 5 уно-баксів.
  4. На сайті є анкета, довкола кожної літери прізвища малюються квадратики.
    Створіть масив чисел по кількості букв кожного прізвища.
  5. Сервер надсилає на клієнт масив цін на продукцію (придумайте довільний масив чисел чи згенеруйте функцією).
    На клієнті потрібно відобразити продукти від дорогого до дешевого, зробивши 12%-у накрутку на товари.
    Якщо ціна товара починається на 2 - діє 10%-а знижка на цю одиницю товара.
    Відсортуйте масив цін по спаданню, враховуючи накрутку та знижки.
    Виведіть в <p> відсортований список цін через кому-пробіл.
    (В реальних випадках клієнт отримує масив об'єктів та знижка надається по іншим критеріям, наприклад, по дню тижня).
  6. Створіть функцію, що емулює запит до сервера: видає кількість лайків до 10 постів (рандомні значення 0..100)
    Користувач налаштував собі відображення 35 постів на екран.
    Ваша задача - посортувати пости по популярності (кількості лайків).
  7. Сервер присилає список запчастин, що є на складі.
    На клієнті потрібно перевірити, чи є дана запчастина на складі, і видати користувачу підтвердження або заперечення.
    Пошук повинен бути нечуттєвим до регістру. Регулярні вирази тут використовувати не треба.
  8. Користувачу потрібно дати посилання на сторінку замовлення запчастини виду:
    http://zapchasti.abc/z###
    створіть таку строку URL, в якій замість ### буде індекс запчастини.
  9. Сервер присилає список, сортований від дешевих до дорогих ноутбуків різних марок, модель та ціну (доповніть список самі): Nocia, RG-17, 3600
    Samgun, KX-a56, 4500
    Nocia, RG-19, 4800
    Arec, Slim-T, 5330
    Nocia, RG-20, 5650
    Arec, Ultra-T, 6200
    ...
    Користувач шукає ноутбук фірми Nocia, потрібно відобразити рекламу найдорожчого ноутбука цієї марки.
    Передайте характеристики цього ноутбука в умовну функцію showAd(nout).
  10. Створіть масив з 26 літер 'a' (англійська).
    Циклом замініть елементи з 2 по 26-й, щоб утворився масив з алфавітом.
    Спробуйте зробити те саме зі строками.
  11. Сервер прислав дані про ціни 50 товарів.
    Користувач проглядає третю сторінку, де відображено 10 товарів.
    Потрібно створити масив цін товарів для цієї сторінки і передати в функцію showTovars(a);
  12. Є у нас картярська гра, на столі ряд карт:


    Вх
    Дп
    10х
    Тп
    Користувач забрав 7 хрестову і поклав на її місце 10 бубну та 6 пікову.
    Користувач забрав 10 хреству та туз піковий.
    Користувач перед валетом поклав 2 і 3 червові.
    Виведіть в консоль остаточний результат.
  13. Створіть функцію, що повертає діаметр заготовки (болванки) в межах 49,5..51,5 мм.
    На складі є 52 заготовки.
    Поступило 4 заготовки.
    7 заготовок відправилися на обробку (станку потрібно знати їх діаметр).
    Прийшов підприємець Василь, приніс 6 заготовок і два по півлітра, попросив обробити якнайшвидше, але не світити перед начальством, поставити десь їх в глибині склада.
    На склад привезли 3 заготовки з паладія і наказ - їх обробити в першу чергу!
    Прийшов токар Вася з візком на 6 деталей, йому кладовщик Грыша розказав про наказ і про півлітри. Вася за півлітри погодився поточити деталі, але спершу все ж таки взяв паладієві заготовки і ті, що лежали поруч.
    Через пару годин Вася знову зайшов за заготовками, отримавши у нагороду півлітри.
    Що залишилося на складі?
  14. Добавте в попередню задачу функцію, що відбраковує заготовки: ті, що менше 50 мм. - потрібно перевезти на інший склад.
  15. Поштове відділення. Дано шафу з полицями: 5 полиць в ряд і 8 рядів. На кожній полиці - від 0 до 50 конвертів.
    Потрібно отримати масив про наявніст вільних місць на полицях, якщо на одну полицю поміщається 50 конвертів.
    Чи є хоч одна полиця порожня?
    Чи на всіх полицях не менше двох листів?