From b1d05b27fe1c95da0919361a8b3955a2adc298a2 Mon Sep 17 00:00:00 2001 From: Andrii Hrushetskyi Date: Mon, 17 Feb 2025 15:28:58 +0100 Subject: [PATCH 1/2] fixed typos and simplified explanation **In chapter 01-05-04 array** Some of sentences were correct, but they were "unnatural" in Ukrainian and make understanding more difficult. --- 1-js/05-data-types/04-array/article.md | 34 +++++++++++++------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/1-js/05-data-types/04-array/article.md b/1-js/05-data-types/04-array/article.md index 0713db8b7..a2fde741b 100644 --- a/1-js/05-data-types/04-array/article.md +++ b/1-js/05-data-types/04-array/article.md @@ -2,7 +2,7 @@ Об'єкти дозволяють зберігати набори значень з ключами. Це чудово. -Але досить часто ми розуміємо, що нам необхідна впорядкована колекція даних, яка складається з 1-го, 2-го, 3-го тощо елементів. Наприклад, така колекція може знадобитись для зберігання списку користувачів, товарів, HTML елементів та ін. +Але досить часто ми розуміємо, що нам необхідна впорядкована колекція даних, яка складається з 1-го, 2-го, 3-го і так далі елементів. Наприклад, така колекція може знадобитись для зберігання списку користувачів, товарів, HTML елементів та ін. Використовувати об'єкти в такому випадку не зручно, тому що вони не надають методів управління порядком елементів. Ми не можемо вставити нову властивість "між" тих, що вже існують. Об'єкти просто не призначені для цього. @@ -128,7 +128,7 @@ alert( fruits.at(-1) ); // Слива Інакше кажучи, `arr.at(i)`: - те саме, що й `arr[i]`, якщо `i >= 0`. -- для від'ємних значень `i` він шукає елемент відступаючи від кінця масиву. +- для від'ємних значень `i` цей метод шукає елемент починаючи з кінця масиву. ## Методи pop/push, shift/unshift @@ -141,9 +141,9 @@ alert( fruits.at(-1) ); // Слива Масиви підтримують обидві операції. -На практиці це дуже часто стає у пригоді. Наприклад, черга з повідомлень, які необхідно показувати на екрані. +Це дуже часто стає у пригоді на практиці. Наприклад, черга з повідомлень, які необхідно показувати на екрані. -Існує також інший варіант використання масивів -- структура даних, яка називається [стек](https://en.wikipedia.org/wiki/Stack_(abstract_data_type)). +Існує також інший варіант використання масивів -- структура даних, яка називається [стек](https://uk.wikipedia.org/wiki/Стек). Вона підтримує два типи операцій: @@ -175,7 +175,7 @@ alert( fruits.at(-1) ); // Слива alert( fruits ); // Яблуко,Апельсин ``` - Що `fruits.pop()`, що `fruits.at(-1)` -- обидва повертають останній елемент масиву, але `fruits.pop()` також змінює масив, видаляючи його. + Що `fruits.pop()`, що `fruits.at(-1)` -- обидва повертають останній елемент масиву, але `fruits.pop()` також змінює масив, видаляючи цей елемент. `push` : Додає елемент в кінець масиву: @@ -248,7 +248,7 @@ arr.push("Груша"); // зміна масиву за посиланням alert( fruits ); // "Банан", "Груша" -- наразі два елементи ``` -...Але те, що робить масиви дійсно особливими –- це їх внутрішнє представлення. Рушій JavaScript намагається зберігати елементи масиву у неперервній області пам'яті, один за одним, як це представлено на ілюстраціях в цьому розділі, а також застосовує інші способи оптимізації, що дозволяють масивам працювати дуже швидко. +...Але те, що робить масиви дійсно особливими – це їхнє внутрішнє представлення. Рушій JavaScript намагається зберігати елементи масиву у неперервній області пам'яті, один за одним, як це представлено на ілюстраціях в цьому розділі, а також застосовує інші способи оптимізації, що дозволяють масивам працювати дуже швидко. Проте масиви втратять всю свою ефективність, якщо ми перестанемо працювати з ними як з "упорядкованою колекцією даних" і почнемо використовувати як звичайний об'єкт. @@ -264,7 +264,7 @@ fruits.age = 25; // створюємо властивість з довільн Це можливо тому, що в основі масивів -- об'єкти. Ми можемо додати будь-які властивості до них. -Але рушій зрозуміє, що ми використовуємо масиви, як звичайні об'єкти. Методи оптимізації, які використовуються для масивів в цьому випадку не підходять, тому вони будуть відключені та не принесуть ніякої користі. +Але рушій зрозуміє, що ми використовуємо масиви як звичайні об'єкти. Методи оптимізації, які використовуються для масивів, в цьому випадку не підходять, тому вони будуть відключені та не принесуть ніякої користі. Варіанти неправильного використання масивів: @@ -286,7 +286,7 @@ fruits.age = 25; // створюємо властивість з довільн fruits.shift(); // видалити один елемент з початку ``` -Але недостатньо просто взяти та видалити елемент з номером `0`. Всі інші елементи також необхідно пронумерувати ще раз. +Цедостатньо просто взяти та видалити елемент з номером `0`. Всі інші елементи також необхідно пронумерувати ще раз. Операція `shift` має виконати 3 дії: @@ -359,7 +359,7 @@ for (let key in arr) { У браузерах та різних програмних середовищах існують масивоподібні об'єкти, *які виглядають як масив*. Тобто вони мають властивість `length` та індекси, проте вони також містять інші нечислові властивості та методи, які нам часто не потрібні. Цикл `for..in` відобразить і їх. Тому, коли нам необхідно працювати з масивами, ці "екстра" властивості можуть стати проблемою. -2. Цикл `for..in` оптимізований для довільних об'єктів, не для масивів, і тому працює в 10-100 разів повільніше. Звісно, це все одно дуже швидко. Збільшення швидкості виконання має значення лише у *вузьких місцях*. Але ми все одно повинні бути обережні з відмінностями. +2. Цикл `for..in` оптимізований для довільних об'єктів, не для масивів, і тому працює в 10-100 разів повільніше. Звісно, це все одно дуже швидко. Збільшення швидкості виконання має значення лише у *вузьких місцях*. Але ми все одно маємо розуміти цю відмінність. Словом, не варто використовувати цикл `for..in` для масивів. @@ -406,9 +406,9 @@ let arr = *!*new Array*/!*("Яблуко", "Груша", "etc"); Він використовується рідше, адже використання квадратних дужок `[]` більш зручний спосіб. Крім того, `new Array` має певну особливість. -Якщо `new Array` викликається з одним аргументом, а саме числом, він створить порожній масив з довжиною, яка дорівнює *цьому числу*. +Якщо `new Array` викликається з одним аргументом і цей аргумент число - він створить порожній масив з довжиною, яка дорівнює *цьому числу*. -Подивімось, як можна завдати собі ведмежої послуги: +Подивімось, як можна вистрілити собі в ногу: ```js run let arr = new Array(2); // чи створиться масив [2] ? @@ -420,7 +420,7 @@ alert( arr.length ); // довжина 2 Для того, щоб позбутись таких сюрпризів, ми використовуємо квадратні дужки `[]`, якщо тільки ми дійсно не маємо причини для використання методу `new Array`. -## Багатовимірні масиви +## Багатовимірні масиви Масиви можуть містити елементи, які своєю чергою теж є масивами. Ми можемо використовувати це для створення багатовимірних масивів, наприклад, для зберігання матриць: @@ -456,7 +456,7 @@ alert( [1] + 1 ); // "11" alert( [1,2] + 1 ); // "1,21" ``` -Масиви не мають `Symbol.toPrimitive`, або робочого `valueOf`, вони реалізують лише метод `toString` таким чином, що `[]` стає порожнім рядком, `[1]` стає `"1"` або `[1,2]` стає `"1,2"`. +Масиви не мають `Symbol.toPrimitive`, або робочого `valueOf`. Вони реалізують лише метод `toString`, який робить `[]` порожнім рядком, `[1]` робить `"1"`, а `[1,2]` робить `"1,2"`. Коли бінарний оператор `"+"` додає щось до рядка, це конвертується в рядок та виглядає наступним чином: @@ -478,7 +478,7 @@ alert( "1,2" + 1 ); // "1,21" - Якщо один з аргументів оператора `==` об'єкт, а інший -- примітив, тоді об'єкт конвертується в примітив. Це пояснюється в розділі . - ...Лише два виключення -- це `null` та `undefined`, які рівні `==` один одному та нічому більше. -Строге порівняння `===` ще простіше, тому що не конвертує типи. +З строгим порівнянням `===` навіть простіше, бо воно не конвертує типи. Тому, якщо ми порівнюємо масиви оператором `==`, то вони ніколи не будуть однаковими, за виключенням, коли ми порівнюємо дві змінні, які посилаються на один масив. @@ -490,7 +490,7 @@ alert( [0] == [0] ); // false Технічно ці масиви є різними об'єктами. Тому вони не рівні. Оператор `==` не порівнює елемент за елементом. -Порівняння масиву з примітивами теж може дати досить цікаві результати: +Порівняння масиву з примітивами може дати небажані результати: ```js run alert( 0 == [] ); // true @@ -535,7 +535,7 @@ let arr = new Array(item1, item2...); Отримання елементів: - ми можемо отримати елемент за його індексом, ось так `arr[0]` -- також ми можемо використати метод `at(i)`, який допускає від'ємні індекси. Для від'ємних значень `i` він відступає від кінця масиву. Якщо `i >= 0`, він працює так само як `arr[i]`. +- також ми можемо використати метод `at(i)`, який допускає від'ємні індекси. При від'ємних значеннях `i` він шукатиме від кінця масиву. Якщо `i >= 0`, він працює так само як `arr[i]`. Ми можемо використовувати масив як двосторонню чергу за допомогою наступних операцій: @@ -553,4 +553,4 @@ let arr = new Array(item1, item2...); Натомість для порівняння масивів використовуйте цикл `for..of`, щоб порівнювати елемент за елементом. -Ми повернемось до масивів та вивчимо методи додавання, видалення, відокремлення елементів та сортування масивів в розділі . +Ми повернемось до масивів та вивчимо методи додавання, видалення, відокремлення елементів та сортування масивів в наступному розділі . From 606b7d175bba5a3d8d7326fe50e35d09f2ff0a38 Mon Sep 17 00:00:00 2001 From: Andrii Hrushetskyi Date: Mon, 17 Feb 2025 15:50:37 +0100 Subject: [PATCH 2/2] fixed typos in tasks for 01-05-04 array There were few small typos --- 1-js/05-data-types/04-array/1-item-value/solution.md | 2 +- 1-js/05-data-types/04-array/3-call-array-this/solution.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/1-js/05-data-types/04-array/1-item-value/solution.md b/1-js/05-data-types/04-array/1-item-value/solution.md index f70732314..64cd69f83 100644 --- a/1-js/05-data-types/04-array/1-item-value/solution.md +++ b/1-js/05-data-types/04-array/1-item-value/solution.md @@ -13,4 +13,4 @@ alert( fruits.length ); // 4 */!* ``` -Це відбувається тому, що масиви — це об’єкти. Отже, `shoppingCart` та `fruits` посилаються на один і той самий об’єкт. +Це відбувається тому, що масиви — це об’єкти. Отже, `shoppingCart` та `fruits` посилаються на один і той самий масив. diff --git a/1-js/05-data-types/04-array/3-call-array-this/solution.md b/1-js/05-data-types/04-array/3-call-array-this/solution.md index 17b7c0c02..7e606198d 100644 --- a/1-js/05-data-types/04-array/3-call-array-this/solution.md +++ b/1-js/05-data-types/04-array/3-call-array-this/solution.md @@ -12,4 +12,4 @@ arr.push(function() { arr[2](); // a,b,function(){...} ``` -Масив має 3 елемента, спочатку їх було 2, плюс функція. +Масив має 3 елемента: початкових 2, плюс функція.