From cf1859333810f591c9667aeb033de9a5fb35c8ec Mon Sep 17 00:00:00 2001
From: Tetiana Aleksina <73138862+taleksina@users.noreply.github.com>
Date: Wed, 6 Sep 2023 16:36:21 +0300
Subject: [PATCH 01/22] Update array-pop.svg
---
1-js/05-data-types/04-array/array-pop.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/05-data-types/04-array/array-pop.svg b/1-js/05-data-types/04-array/array-pop.svg
index 82b112b4a..203fffdaa 100644
--- a/1-js/05-data-types/04-array/array-pop.svg
+++ b/1-js/05-data-types/04-array/array-pop.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
From f7870ae6496a93c52bd515ac2554de50ee2eeb51 Mon Sep 17 00:00:00 2001
From: Tetiana Aleksina <73138862+taleksina@users.noreply.github.com>
Date: Wed, 6 Sep 2023 17:13:04 +0300
Subject: [PATCH 02/22] Update array-shift.svg
---
1-js/05-data-types/04-array/array-shift.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/05-data-types/04-array/array-shift.svg b/1-js/05-data-types/04-array/array-shift.svg
index 9485a3c96..4a4f19e06 100644
--- a/1-js/05-data-types/04-array/array-shift.svg
+++ b/1-js/05-data-types/04-array/array-shift.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
From 04d962afaa062ee5966a704516926c17b80aed8e Mon Sep 17 00:00:00 2001
From: Tetiana Aleksina <73138862+taleksina@users.noreply.github.com>
Date: Wed, 6 Sep 2023 17:19:25 +0300
Subject: [PATCH 03/22] Update array-pop.svg
---
1-js/05-data-types/04-array/array-pop.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/05-data-types/04-array/array-pop.svg b/1-js/05-data-types/04-array/array-pop.svg
index 203fffdaa..f252014aa 100644
--- a/1-js/05-data-types/04-array/array-pop.svg
+++ b/1-js/05-data-types/04-array/array-pop.svg
@@ -1 +1 @@
-
+
From 345fa6c3fde01616a60266b352a1a5960bd9a745 Mon Sep 17 00:00:00 2001
From: Tetiana Aleksina <73138862+taleksina@users.noreply.github.com>
Date: Wed, 6 Sep 2023 17:21:15 +0300
Subject: [PATCH 04/22] Update array-shift.svg
---
1-js/05-data-types/04-array/array-shift.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/05-data-types/04-array/array-shift.svg b/1-js/05-data-types/04-array/array-shift.svg
index 4a4f19e06..e8bf576ff 100644
--- a/1-js/05-data-types/04-array/array-shift.svg
+++ b/1-js/05-data-types/04-array/array-shift.svg
@@ -1 +1 @@
-
+
From 4d4ef57e69d407a7dce70e01397f1e2df8d4f82e Mon Sep 17 00:00:00 2001
From: Tetiana Aleksina <73138862+taleksina@users.noreply.github.com>
Date: Wed, 6 Sep 2023 21:54:19 +0300
Subject: [PATCH 05/22] Update article.md
---
1-js/05-data-types/04-array/article.md | 172 ++++++++++++-------------
1 file changed, 86 insertions(+), 86 deletions(-)
diff --git a/1-js/05-data-types/04-array/article.md b/1-js/05-data-types/04-array/article.md
index a6e182105..b327c24ac 100644
--- a/1-js/05-data-types/04-array/article.md
+++ b/1-js/05-data-types/04-array/article.md
@@ -2,15 +2,15 @@
Об’єкти дозволяють зберігати набори значень з ключами. Це чудово.
-Але досить часто ми розуміємо, що нам необхідна впорядкована колекція даних, яка складається з 1-го, 2-го, 3-го і т.д. елементів. Наприклад, така колеція може знадобитись для зберігання списку користувачів, товарів, HTML елементів та ін.
+Але досить часто ми розуміємо, що нам необхідна впорядкована колекція даних, яка складається з 1-го, 2-го, 3-го і т.д. елементів. Наприклад, така колекція може знадобитись для зберігання списку користувачів, товарів, HTML елементів та ін.
-Використовувати об’єкти в такому випадку не зручно, тому що вони не надають методів управління порядком елементів. Ми не можемо вставити нову властивість "між" існуючих. Об’єкти просто не призначені для цього.
+Використовувати об’єкти в такому випадку не зручно, тому що вони не надають методів управління порядком елементів. Ми не можемо вставити нову властивість "між" тих, що вже існують. Об’єкти просто не призначені для цього.
Для зберігання впорядкованих колекцій існує інший тип даних, який має назву масив, `Array`.
## Оголошення
-Існує два типи синтаксу для створення порожнього масиву:
+Існує два типи синтаксису для створення порожнього масиву:
```js
let arr = new Array();
@@ -20,37 +20,37 @@ let arr = [];
Майже завжди використовують другий тип синтаксису. Ми можемо вказати початкові елементи масиву у квадратних дужках:
```js
-let fruits = ["Apple", "Orange", "Plum"];
+let fruits = ["Яблуко", "Апельсин", "Слива"];
```
Елементи масиву нумеруються починаючи з нуля.
-Ми можемо отримати елемент масиву, вказавши його номер в квадратних дужках:
+Ми можемо отримати елемент масиву, вказавши його номер у квадратних дужках:
```js run
-let fruits = ["Apple", "Orange", "Plum"];
+let fruits = ["Яблуко", "Апельсин", "Слива"];
-alert( fruits[0] ); // Apple
-alert( fruits[1] ); // Orange
-alert( fruits[2] ); // Plum
+alert( fruits[0] ); // Яблуко
+alert( fruits[1] ); // Апельсин
+alert( fruits[2] ); // Слива
```
Можемо замінити елемент:
```js
-fruits[2] = 'Pear'; // тепер ["Apple", "Orange", "Pear"]
+fruits[2] = 'Груша'; // тепер ["Яблуко", "Апельсин", "Груша"]
```
...Або додати новий:
```js
-fruits[3] = 'Lemon'; // тепер ["Apple", "Orange", "Pear", "Lemon"]
+fruits[3] = 'Лимон'; // тепер ["Яблуко", "Апельсин", "Груша", "Лимон"]
```
Загальна кількість елементів масиву зберігається у його властивості `length`:
```js run
-let fruits = ["Apple", "Orange", "Plum"];
+let fruits = ["Яблуко", "Апельсин", "Слива"];
alert( fruits.length ); // 3
```
@@ -58,9 +58,9 @@ alert( fruits.length ); // 3
Ми можемо переглянути масив цілком за допомогою `alert`
```js run
-let fruits = ["Apple", "Orange", "Plum"];
+let fruits = ["Яблуко", "Апельсин", "Слива"];
-alert( fruits ); // Apple,Orange,Plum
+alert( fruits ); // Яблуко, Апельсин, Слива
```
У масивах можуть зберігатись елементи будь-якого типу.
@@ -69,23 +69,23 @@ alert( fruits ); // Apple,Orange,Plum
```js run no-beautify
// різні типи значень
-let arr = [ 'Apple', { name: 'John' }, true, function() { alert('hello'); } ];
+let arr = [ 'Яблуко', { name: 'Микола' }, true, function() { alert('привіт'); } ];
// отримати елемент з індексом 1 (об’єкт) та вивести його властивість name
-alert( arr[1].name ); // John
+alert( arr[1].name ); // Микола
// отримати елемент з індексом 3 (функція) та виконати її
-arr[3](); // hello
+arr[3](); // привіт
```
````smart header="Кома в кінці"
-Список елементів масиву, як і список елементів об’єкту може закінчуватись комою:
+Список елементів масиву, як і список елементів об’єкта може закінчуватись комою:
```js
let fruits = [
- "Apple",
- "Orange",
- "Plum"*!*,*/!*
+ "Яблуко",
+ "Апельсин",
+ "Слива"*!*,*/!*
];
```
@@ -105,9 +105,9 @@ let fruits = [
Ми можемо явно обчислити індекс останнього елемента, а потім отримати до нього доступ: `fruits[fruits.length - 1]`.
```js run
-let fruits = ["Apple", "Orange", "Plum"];
+let fruits = ["Яблуко", "Апельсин", "Слива"];
-alert( fruits[fruits.length-1] ); // Plum
+alert( fruits[fruits.length-1] ); // Слива
```
Трохи громіздко, чи не так? Нам потрібно двічі написати ім’я змінної.
@@ -115,10 +115,10 @@ alert( fruits[fruits.length-1] ); // Plum
На щастя, є коротший синтаксис: `fruits.at(-1)`:
```js run
-let fruits = ["Apple", "Orange", "Plum"];
+let fruits = ["Яблуко", "Апельсин", "Слива"];
// те ж саме що й fruits[fruits.length-1]
-alert( fruits.at(-1) ); // Plum
+alert( fruits.at(-1) ); // Слива
```
Іншими словами, `arr.at(i)`:
@@ -127,18 +127,18 @@ alert( fruits.at(-1) ); // Plum
## Методи pop/push, shift/unshift
-[Черга](https://uk.wikipedia.org/wiki/Черга_(структура_даних)) — один з найбільш популярних варіантів використання об’єкту. У ком’ютерних науках так позначають колекцію елементів, яка підтримує дві операції:
+[Черга](https://uk.wikipedia.org/wiki/Черга_(структура_даних)) -- один з найбільш популярних варіантів використання об’єкта. У комп’ютерних науках так позначають колекцію елементів, яка підтримує дві операції:
- `push` додає елемент у кінець списку.
-- `shift` видаляє елемент на початку, зміщчуючи чергу, таким чином, що 2-й елемент стає 1-м.
+- `shift` видаляє елемент на початку, зміщуючи чергу, таким чином, що 2-й елемент стає 1-м.

Масиви підтримують обидві операції.
-На практиці це дуже часто стає у нагоді. Наприклад, черга з повідомлень, які необхідно показувати на екрані.
+На практиці це дуже часто стає у пригоді. Наприклад, черга з повідомлень, які необхідно показувати на екрані.
-Існує також інший варіант використання масивів - структура даних, яка називається [стек](https://en.wikipedia.org/wiki/Stack_(abstract_data_type)).
+Існує також інший варіант використання масивів -- структура даних, яка називається [стек](https://en.wikipedia.org/wiki/Stack_(abstract_data_type)).
Вона підтримує два типи операцій:
@@ -147,13 +147,13 @@ alert( fruits.at(-1) ); // Plum
Таким чином нові елементи завжди додаються або видаляються з "кінця".
-Хорошим пракладом `стеку` є колода карт: нові карти кладуться на верх і беруться теж зверху:
+Хорошим прикладом `стеку` є колода карт: нові карти кладуться на верх і беруться теж зверху:

-У стеках останній доданий елемент повертається першим, цей принцип також називають LIFO (з англ. Last-In-First-Out, "останій прийшов - перший пішов"). Для черг ми використовуємо принцип FIFO (з англ. First-In-First-Out, "перший прийшов - перший пішов").
+У стеках останній доданий елемент повертається першим, цей принцип також називають LIFO (з англ. Last-In-First-Out, "останній прийшов -- перший пішов"). Для черг ми використовуємо принцип FIFO (з англ. First-In-First-Out, "перший прийшов -- перший пішов").
-Масиви в JavaScript можуть працювати як стеки і як черги. Ми можемо додавати/видаляти елементи як на початку так і у кінці масиву.
+Масиви в JavaScript можуть працювати як стеки і як черги. Ми можемо додавати/видаляти елементи як на початку, так і у кінці масиву.
В комп’ютерних науках структури даних, які дозволяють це робити, мають назву [двобічна черга](https://uk.wikipedia.org/wiki/Двобічна_черга).
@@ -163,11 +163,11 @@ alert( fruits.at(-1) ); // Plum
: Видаляє останній елемент масиву та повертає його:
```js run
- let fruits = ["Apple", "Orange", "Pear"];
+ let fruits = ["Яблуко", "Апельсин", "Груша"];
- alert( fruits.pop() ); // видаляємо "Pear" та виводимо його
+ alert( fruits.pop() ); // видаляємо "Груша" та виводимо його
- alert( fruits ); // Apple, Orange
+ alert( fruits ); // Яблуко, Апельсин
```
І `fruits.pop()`, і `fruits.at(-1)` повертають останній елемент масиву, але `fruits.pop()` також змінює масив, видаляючи його.
@@ -176,11 +176,11 @@ alert( fruits.at(-1) ); // Plum
: Додає елемент в кінець масиву:
```js run
- let fruits = ["Apple", "Orange"];
+ let fruits = ["Яблуко", "Апельсин"];
- fruits.push("Pear");
+ fruits.push("Груша");
- alert( fruits ); // Apple, Orange, Pear
+ alert( fruits ); // Яблуко, Апельсин, Груша
```
Виклик `fruits.push(...)` рівнозначний `fruits[fruits.length] = ...`.
@@ -191,39 +191,39 @@ alert( fruits.at(-1) ); // Plum
: Видаляє перший елемент з масиву та повертає його:
```js run
- let fruits = ["Apple", "Orange", "Pear"];
+ let fruits = ["Яблуко", "Апельсин", "Груша"];
- alert( fruits.shift() ); // видаляємо Apple та виводимо його
+ alert( fruits.shift() ); // видаляємо Яблуко та виводимо його
- alert( fruits ); // Orange, Pear
+ alert( fruits ); // Апельсин, Груша
```
`unshift`
: Додає елемент в початок масиву:
```js run
- let fruits = ["Orange", "Pear"];
+ let fruits = ["Апельсин", "Груша"];
- fruits.unshift('Apple');
+ fruits.unshift('Яблуко');
- alert( fruits ); // Apple, Orange, Pear
+ alert( fruits ); // Яблуко, Апельсин, Груша
```
Методи `push` та `unshift` можуть додавати одразу декілька елементів:
```js run
-let fruits = ["Apple"];
+let fruits = ["Яблуко"];
-fruits.push("Orange", "Peach");
-fruits.unshift("Pineapple", "Lemon");
+fruits.push("Апельсин", "Персик");
+fruits.unshift("Ананас", "Лимон");
-// ["Pineapple", "Lemon", "Apple", "Orange", "Peach"]
+// ["Ананас", "Лимон", "Яблуко", "Апельсин", "Персик"]
alert( fruits );
```
## Внутрішня структура масивів
-Масив -- це спеціальний вид об’єктів. Квадратні дужки використовують для доступу до властивості `arr[0]`, що в свою чергу прийшло з синтаксису об’єктів. Це теж саме, що доступ до властивості об’єкта `obj[key]`, де `arr` це об’єкт в якому числа використовуються як ключі.
+Масив -- це спеціальний вид об’єктів. Квадратні дужки використовують для доступу до властивості `arr[0]`, що своєю чергою прийшло з синтаксису об’єктів. Це теж саме, що доступ до властивості об’єкта `obj[key]`, де `arr` це об’єкт в якому числа використовуються як ключі.
Масиви розширюють функціональність об’єкта тим, що надають можливість працювати з упорядкованими колекціями даних, а також надають доступ до властивості `length`. Але в основі це досі об’єкт.
@@ -232,15 +232,15 @@ alert( fruits );
Наприклад, копіюється за посиланням:
```js run
-let fruits = ["Banana"]
+let fruits = ["Банан"]
let arr = fruits; // копіюється за посиланням (дві змінні посилаються на один масив)
alert( arr === fruits ); // true
-arr.push("Pear"); // зміна масиву за посиланням
+arr.push("Груша"); // зміна масиву за посиланням
-alert( fruits ); // Banana, Pear - наразі два елемента
+alert( fruits ); // Банан, Груша -- наразі два елементи
```
...Але те, що робить масиви дійсно особливими – це їх внутрішнє представлення. Рушій JavaScript намагається зберігати елементи масиву у неперервній області пам’яті, один за одним, як це представлено на ілюстраціях в цьому розділі, а також застосовує інші способи оптимізації, що дозволяють масивам працювати дуже швидко.
@@ -257,15 +257,15 @@ fruits[99999] = 5; // створюємо властивість, індекс я
fruits.age = 25; // створюємо властивість з довільним ім’ям
```
-Це можливо тому, що в основі масивів — об’єкти. Ми можемо додати будь-які властивості до них.
+Це можливо тому, що в основі масивів -- об’єкти. Ми можемо додати будь-які властивості до них.
-Але рушій зрозуміє, що ми використувуємо масиви, як звичайні об’єкти. Методи оптимізації, які використовуються для масивів в цьому випадку не підходять, тому будуть відключені і не принесуть ніякої користі.
+Але рушій зрозуміє, що ми використовуємо масиви, як звичайні об’єкти. Методи оптимізації, які використовуються для масивів в цьому випадку не підходять, тому будуть відключені та не принесуть ніякої користі.
Варіанти неправильного використання масивів:
- Додавання нечислових властивостей, таких як `arr.test = 5`.
-- Створення "дірок", наприклад: `arr[0]` а за ним `arr[1000]` (та нічого між цими елементами).
-- Заповнення масиву в зворотньому порядку, наприклад: `arr[1000]`, `arr[999]` і т. д.
+- Створення "дірок", наприклад: `arr[0]`, а за ним `arr[1000]` (та нічого між цими елементами).
+- Заповнення масиву у зворотному порядку, наприклад: `arr[1000]`, `arr[999]` і т. д.
Будь ласка, думайте про масиви як про особливі структури для роботи з _впорядкованими даними_. Вони надають спеціальні методи для цього. Масиви дуже ретельно налаштовані на роботу з неперервними впорядкованими даними, тому використовуйте їх саме таким чином. Тому, якщо вам необхідні довільні ключі, дуже ймовірно, що вам більше підійдуть звичайні об’єкти `{}`.
@@ -275,7 +275,7 @@ fruits.age = 25; // створюємо властивість з довільн

-Чому працювати з кінцем масиву швидше, ніж з початком? Давайте переглянемо, що відбувається під час виконання:
+Чому працювати з кінцем масиву швидше, ніж з початком? Перегляньмо, що відбувається під час виконання:
```js
fruits.shift(); // видалити один елемент з початку
@@ -286,12 +286,12 @@ fruits.shift(); // видалити один елемент з початку
Операція `shift` має виконати 3 дії:
1. Видалити елемент з індексом `0`.
-2. Пересунути всі елементи вліво змінивши в них нумерацію - індекс `1` на `0`, `2` на `1` і так далі.
+2. Перемістити всі елементи вліво змінивши в них нумерацію -- індекс `1` на `0`, `2` на `1` і так далі.
3. Оновити властивість `length`.

-**Чим більше елементів у масиві, тим більше часу необхідно для того, щоб пересунути їх, більше операцій з пам’яттю.**
+**Чим більше елементів у масиві, тим більше часу необхідно для того, щоб перемістити їх, більше операцій з пам’яттю.**
Теж саме відбувається з методом `unshift`: для того, щоб додати елемент в початок масиву, необхідно спочатку перемістити всі елементи масиву вправо збільшуючи їх індекси.
@@ -311,10 +311,10 @@ fruits.pop(); // видаляємо один елемент з кінця мас
## Цикли
-Один з найстаріших методів перебору елементів масиву - це цикл `for` по індексах:
+Один з найстаріших методів перебору елементів масиву -- це цикл `for` по індексах:
```js run
-let arr = ["Apple", "Orange", "Pear"];
+let arr = ["Яблуко", "Апельсин", "Груша"];
*!*
for (let i = 0; i < arr.length; i++) {
@@ -326,33 +326,33 @@ for (let i = 0; i < arr.length; i++) {
Але для масивів можливий інший варіант циклу, `for..of`:
```js run
-let fruits = ["Apple", "Orange", "Plum"];
+let fruits = ["Яблуко", "Апельсин", "Слива"];
-// ітерується по елементам масиву
+// ітерується по елементах масиву
for (let fruit of fruits) {
alert( fruit );
}
```
-Цикл `for..of` не надає доступу до індексу поточного елементу, тільки до його значення, але у більшості випадків цього достатньо. До того ж, це коротше.
+Цикл `for..of` не надає доступу до індексу поточного елементу, тільки до його значення, але у більшості випадків цього достатньо. До того ж це коротше.
-Технічно, так як масив це об’єкт, ми можемо використовувати цикл `for..in`:
+Технічно, оскільки масив це об’єкт, ми можемо використовувати цикл `for..in`:
```js run
-let arr = ["Apple", "Orange", "Pear"];
+let arr = ["Яблуко", "Апельсин", "Груша"];
*!*
for (let key in arr) {
*/!*
- alert( arr[key] ); // Apple, Orange, Pear
+ alert( arr[key] ); // Яблуко, Апельсин, Груша
}
```
-Але насправді це погана ідея. Існують потеційні проблеми:
+Але насправді це погана ідея. Існують потенційні проблеми:
1. Цикл `for..in` ітерується по *всіх властивостях*, не тільки по числових.
- У браузерах та різних програмних середовищах існують масивоподібні об’єкти, *які виглядають як масив*. Тобто вони мають властивість `length` та індекси, проте вони також містять інші нечислові властивості і методи, які нам часто не потрібні. Цикл `for..in` відобразить і їх. Тому, коли нам необхідно працювати з масивами, ці "екстра" властивості можуть стати проблемою.
+ У браузерах та різних програмних середовищах існують масивоподібні об’єкти, *які виглядають як масив*. Тобто вони мають властивість `length` та індекси, проте вони також містять інші нечислові властивості та методи, які нам часто не потрібні. Цикл `for..in` відобразить і їх. Тому, коли нам необхідно працювати з масивами, ці "екстра" властивості можуть стати проблемою.
2. Цикл `for..in` оптимізований для довільних об’єктів, не для масивів, і тому в 10-100 разів повільніше. Звісно, це все одно дуже швидко. Збільшення швидкості виконання має значення лише у *вузьких місцях*. Але ми все одно повинні бути обережні з відмінностями.
@@ -367,7 +367,7 @@ for (let key in arr) {
```js run
let fruits = [];
-fruits[123] = "Apple";
+fruits[123] = "Яблуко";
alert( fruits.length ); // 124
```
@@ -388,7 +388,7 @@ arr.length = 5; // повертаємо попередню довжину ...
alert( arr[3] ); // undefined: ..., а видалені значення не повертаються
```
-Отож, найпростіший метод очистки масиву це: `arr.length = 0;`.
+Отож, найпростіший метод очищення масиву це: `arr.length = 0;`.
## new Array() [#new-array]
@@ -396,7 +396,7 @@ alert( arr[3] ); // undefined: ..., а видалені значення не п
Існує ще один варіант створення масиву:
```js
-let arr = *!*new Array*/!*("Apple", "Pear", "etc");
+let arr = *!*new Array*/!*("Яблуко", "Груша", "etc");
```
Він використовується рідше, адже квадратні дужки коротші `[]`. А також має певну особливість.
@@ -467,11 +467,11 @@ alert( "1,2" + 1 ); // "1,21"
Цей оператор не має спеціальних методів для опрацювання масивів, тому він працює з ними, як з об’єктами.
-Давайте згадаємо правила:
+Згадаймо правила:
- Два об’єкти рівні `==` лише коли вони посилаються на один об’єкт.
-- Якщо один з аргументів оператора `==` об’єкт, а інший — примітив, тоді об’єкт конвертується в примітив. Це пояснюється в розділі .
-- ...Лише два виключення — це `null` та `undefined`, які рівні `==` один одному та нічому більше.
+- Якщо один з аргументів оператора `==` об’єкт, а інший -- примітив, тоді об’єкт конвертується в примітив. Це пояснюється в розділі .
+- ...Лише два виключення -- це `null` та `undefined`, які рівні `==` один одному та нічому більше.
Строге порівняння `===` ще простіше, тому що не конвертує типи.
@@ -498,7 +498,7 @@ alert('0' == [] ); // false
Далі відбувається порівняння примітивів. Логіка такого порівняння описана в розділі :
```js run
-// після того, як [] було сконвертовано в ''
+// після того, як [] було конвертовано в ''
alert( 0 == '' ); // true, тому що '' конвертується в число 0
alert('0' == '' ); // false, тут немає конвертації типів; це різні рядки
@@ -506,13 +506,13 @@ alert('0' == '' ); // false, тут немає конвертації типів
Тож, як порівнювати масиви?
-Все просто: не використовуйте оператор `==`. Натомість, порівнюйте їх в циклі, елемент за елементом. Також можна використати методи перебору, про які написано в наступному розділі.
+Все просто: не використовуйте оператор `==`. Натомість порівнюйте їх в циклі, елемент за елементом. Також можна використати методи перебору, про які написано в наступному розділі.
## Підсумки
-Масив -- це особливий вид об’єкту, створений для зберігання та обробки _впорядкованих елементів_.
+Масив -- це особливий вид об’єкта, створений для зберігання та обробки _впорядкованих елементів_.
-Оголошення массиву:
+Оголошення масиву:
```js
// квадратні дужки (як правило)
@@ -525,12 +525,12 @@ let arr = new Array(item1, item2...);
Виклик `new Array(number)` створює масив з заданою довжиною, але без елементів.
- Властивість `length` демонструє довжину масиву або, якщо точніше, останній цифровий індекс масиву плюс один. Це виконується автоматично методами масиву.
-- Якщо ми вручну скорочуємо `length`, масив зменшується (нагадаємо, що ця операція незворотня).
+- Якщо ми вручну скорочуємо `length`, масив зменшується (нагадаємо, що ця операція незворотна).
Отримання елементів:
- ми можемо отримати елемент за його індексом, ось так `arr[0]`
-- також ми можемо використати метод `at(i)`, який допускає негативні індекси. Для негативних значень `i` він відступає від кінця масиву. Якщо `i >= 0`, він працює так само, як `arr[i]`.
+- також ми можемо використати метод `at(i)`, який допускає негативні індекси. Для негативних значень `i` він відступає від кінця масиву. Якщо `i >= 0`, він працює так само як `arr[i]`.
Ми можемо використовувати масив як двосторонню чергу за допомогою наступних операцій:
@@ -540,12 +540,12 @@ let arr = new Array(item1, item2...);
- `unshift(...items)` додає `items` в початок масиву.
Для того, щоб пройтись циклом по елементах масиву:
- - `for (let i=0; i`, `<` та інші), тому що в них немає спеціальних методів для порівнювання масивів. Ці оператори працюють з масивами як з об’єктами, а це не те, що нам потрібно.
+Для порівняння масивів, не використовуйте оператор `==` (так само як `>`, `<` та інші), тому що в них немає спеціальних методів для порівнювання масивів. Ці оператори працюють з масивами як з об’єктами, а це не те, що нам потрібно.
-Натомість, для порівняння масивів використовуйте цикл `for..of`, щоб порівнювати елемент за елементом.
+Натомість для порівняння масивів використовуйте цикл `for..of`, щоб порівнювати елемент за елементом.
Ми повернемось до масивів та вивчимо методи додавання, видалення, відокремлення елементів та сортування масивів в розділі .
From 74d8ba482e85a52542f965a798bfd7aab37b65ac Mon Sep 17 00:00:00 2001
From: Tetiana Aleksina <73138862+taleksina@users.noreply.github.com>
Date: Thu, 7 Sep 2023 16:09:58 +0300
Subject: [PATCH 06/22] Update article.md
---
1-js/05-data-types/04-array/article.md | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/1-js/05-data-types/04-array/article.md b/1-js/05-data-types/04-array/article.md
index b327c24ac..765f9ea2e 100644
--- a/1-js/05-data-types/04-array/article.md
+++ b/1-js/05-data-types/04-array/article.md
@@ -89,7 +89,7 @@ let fruits = [
];
```
-Кома в кінці спрощує процес додавання/видалення елементів, тому що всі рядки стають однотипними.
+Кома в кінці рядка спрощує процес додавання/видалення елементів, тому що всі рядки стають однотипними.
````
## Отримати останні елементи за допомогою "at"
@@ -100,7 +100,7 @@ let fruits = [
Деякі мови програмування дозволяють використовувати негативні індекси з цією ж метою, наприклад, `fruits[-1]`.
-Хоча в JavaScript це не працюватиме. Результат буде `undefined`, оскільки індекс у квадратних дужках трактується буквально.
+Проте в JavaScript це не працюватиме. Результат буде `undefined`, оскільки індекс у квадратних дужках трактується буквально.
Ми можемо явно обчислити індекс останнього елемента, а потім отримати до нього доступ: `fruits[fruits.length - 1]`.
@@ -227,7 +227,7 @@ alert( fruits );
Масиви розширюють функціональність об’єкта тим, що надають можливість працювати з упорядкованими колекціями даних, а також надають доступ до властивості `length`. Але в основі це досі об’єкт.
-Запам’ятайте, JavaScript містить лише 8 базових типів даних (більше інформації у розділі [Типи даних](info:types)). Масив -- це об’єкт, який поводить себе як об’єкт.
+Запам’ятайте, JavaScript містить лише 8 базових типів даних (більше інформації у розділі [Типи даних](info:types)). Масив -- це об’єкт, тому він поводить себе як об’єкт.
Наприклад, копіюється за посиланням:
@@ -243,7 +243,7 @@ arr.push("Груша"); // зміна масиву за посиланням
alert( fruits ); // Банан, Груша -- наразі два елементи
```
-...Але те, що робить масиви дійсно особливими – це їх внутрішнє представлення. Рушій JavaScript намагається зберігати елементи масиву у неперервній області пам’яті, один за одним, як це представлено на ілюстраціях в цьому розділі, а також застосовує інші способи оптимізації, що дозволяють масивам працювати дуже швидко.
+...Але те, що робить масиви дійсно особливими –- це їх внутрішнє представлення. Рушій JavaScript намагається зберігати елементи масиву у неперервній області пам’яті, один за одним, як це представлено на ілюстраціях в цьому розділі, а також застосовує інші способи оптимізації, що дозволяють масивам працювати дуже швидко.
Проте масиви втратять всю свою ефективність, якщо ми перестанемо працювати з ними як з "упорядкованою колекцією даних" і почнемо використовувати як звичайний об’єкт.
@@ -265,7 +265,7 @@ fruits.age = 25; // створюємо властивість з довільн
- Додавання нечислових властивостей, таких як `arr.test = 5`.
- Створення "дірок", наприклад: `arr[0]`, а за ним `arr[1000]` (та нічого між цими елементами).
-- Заповнення масиву у зворотному порядку, наприклад: `arr[1000]`, `arr[999]` і т. д.
+- Заповнення масиву у зворотному порядку, наприклад: `arr[1000]`, `arr[999]` і т.д.
Будь ласка, думайте про масиви як про особливі структури для роботи з _впорядкованими даними_. Вони надають спеціальні методи для цього. Масиви дуже ретельно налаштовані на роботу з неперервними впорядкованими даними, тому використовуйте їх саме таким чином. Тому, якщо вам необхідні довільні ключі, дуже ймовірно, що вам більше підійдуть звичайні об’єкти `{}`.
@@ -354,7 +354,7 @@ for (let key in arr) {
У браузерах та різних програмних середовищах існують масивоподібні об’єкти, *які виглядають як масив*. Тобто вони мають властивість `length` та індекси, проте вони також містять інші нечислові властивості та методи, які нам часто не потрібні. Цикл `for..in` відобразить і їх. Тому, коли нам необхідно працювати з масивами, ці "екстра" властивості можуть стати проблемою.
-2. Цикл `for..in` оптимізований для довільних об’єктів, не для масивів, і тому в 10-100 разів повільніше. Звісно, це все одно дуже швидко. Збільшення швидкості виконання має значення лише у *вузьких місцях*. Але ми все одно повинні бути обережні з відмінностями.
+2. Цикл `for..in` оптимізований для довільних об’єктів, не для масивів, і тому працює в 10-100 разів повільніше. Звісно, це все одно дуже швидко. Збільшення швидкості виконання має значення лише у *вузьких місцях*. Але ми все одно повинні бути обережні з відмінностями.
Словом, не варто використовувати цикл `for..in` для масивів.
@@ -399,7 +399,7 @@ alert( arr[3] ); // undefined: ..., а видалені значення не п
let arr = *!*new Array*/!*("Яблуко", "Груша", "etc");
```
-Він використовується рідше, адже квадратні дужки коротші `[]`. А також має певну особливість.
+Він використовується рідше, адже використання квадратних дужок `[]` більш зручний спосіб. Крім того, `new Array` має певну особливість.
Якщо `new Array` викликається з одним аргументом, а саме числом, він створить порожній масив з довжиною, яка дорівнює *цьому числу*.
@@ -413,7 +413,7 @@ alert( arr[0] ); // undefined! елементи відсутні.
alert( arr.length ); // довжина 2
```
-Для того, щоб позбутись таких сюрпризів, як правило, ми використовуємо квадратні дужки `[]`, якщо тільки ми дійсно не маємо причини для використання методу `new Array`.
+Для того, щоб позбутись таких сюрпризів, ми використовуємо квадратні дужки `[]`, якщо тільки ми дійсно не маємо причини для використання методу `new Array`.
## Багатовимірні масиви
@@ -483,7 +483,7 @@ alert( [] == [] ); // false
alert( [0] == [0] ); // false
```
-Технічно ці масиви, це різні об’єкти. Тому вони не рівні. Оператор `==` не порівнює елемент за елементом.
+Технічно ці масиви є різними об’єктами. Тому вони не рівні. Оператор `==` не порівнює елемент за елементом.
Порівняння масиву з примітивами теж може дати досить цікаві результати:
From 9cd9783b9569b2abafd328df348e2c82f1f5657f Mon Sep 17 00:00:00 2001
From: Tetiana Aleksina <73138862+taleksina@users.noreply.github.com>
Date: Thu, 7 Sep 2023 17:28:40 +0300
Subject: [PATCH 07/22] Update long-polling.svg
---
5-network/10-long-polling/long-polling.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/5-network/10-long-polling/long-polling.svg b/5-network/10-long-polling/long-polling.svg
index 045ef371f..90ca04ec2 100644
--- a/5-network/10-long-polling/long-polling.svg
+++ b/5-network/10-long-polling/long-polling.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
From 6901ab5e2c890913f1d302a90f729fd6fb6b5082 Mon Sep 17 00:00:00 2001
From: Tetiana Aleksina <73138862+taleksina@users.noreply.github.com>
Date: Fri, 8 Sep 2023 15:22:54 +0300
Subject: [PATCH 08/22] Update witch_greedy1.svg
---
.../10-regexp-greedy-and-lazy/witch_greedy1.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy1.svg b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy1.svg
index d911ece21..76652f121 100644
--- a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy1.svg
+++ b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy1.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
From e917052680c54247723a7ae683fca841ff33bd64 Mon Sep 17 00:00:00 2001
From: Tetiana Aleksina <73138862+taleksina@users.noreply.github.com>
Date: Fri, 8 Sep 2023 15:35:52 +0300
Subject: [PATCH 09/22] Update witch_greedy2.svg
---
.../10-regexp-greedy-and-lazy/witch_greedy2.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy2.svg b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy2.svg
index f821c6d8c..9fc6bf00f 100644
--- a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy2.svg
+++ b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy2.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
From aa9189203a6fe561ad5bd3c3d26d6c6d380a4981 Mon Sep 17 00:00:00 2001
From: Tetiana Aleksina <73138862+taleksina@users.noreply.github.com>
Date: Fri, 8 Sep 2023 15:42:09 +0300
Subject: [PATCH 10/22] Update witch_greedy3.svg
---
.../10-regexp-greedy-and-lazy/witch_greedy3.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy3.svg b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy3.svg
index 9509882b2..c10ee6f9d 100644
--- a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy3.svg
+++ b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy3.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
From c7a550f4228333c3c1f2b37f2b67d7893c543783 Mon Sep 17 00:00:00 2001
From: Tetiana Aleksina <73138862+taleksina@users.noreply.github.com>
Date: Fri, 8 Sep 2023 16:42:26 +0300
Subject: [PATCH 11/22] Update witch_greedy4.svg
---
.../10-regexp-greedy-and-lazy/witch_greedy4.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy4.svg b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy4.svg
index 8c5532b9f..ce6f0d440 100644
--- a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy4.svg
+++ b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy4.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
From 1653344bafad030efdcbf7d11ffa9b482bfa4a99 Mon Sep 17 00:00:00 2001
From: Tetiana Aleksina <73138862+taleksina@users.noreply.github.com>
Date: Fri, 8 Sep 2023 20:12:16 +0300
Subject: [PATCH 12/22] Update witch_greedy3.svg
---
.../10-regexp-greedy-and-lazy/witch_greedy3.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy3.svg b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy3.svg
index c10ee6f9d..c95f2ce14 100644
--- a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy3.svg
+++ b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy3.svg
@@ -1 +1 @@
-
+
From 432ac2bdcee9b6e881fe83c8ae810432244af63b Mon Sep 17 00:00:00 2001
From: Tetiana Aleksina <73138862+taleksina@users.noreply.github.com>
Date: Fri, 8 Sep 2023 20:14:14 +0300
Subject: [PATCH 13/22] Update witch_greedy4.svg
---
.../10-regexp-greedy-and-lazy/witch_greedy4.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy4.svg b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy4.svg
index ce6f0d440..f736059df 100644
--- a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy4.svg
+++ b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy4.svg
@@ -1 +1 @@
-
+
From b911dbb8ad2f7cc066d24f93bd80635e3d63c3af Mon Sep 17 00:00:00 2001
From: Tetiana Aleksina <73138862+taleksina@users.noreply.github.com>
Date: Fri, 8 Sep 2023 20:18:42 +0300
Subject: [PATCH 14/22] Update witch_greedy5.svg
---
.../10-regexp-greedy-and-lazy/witch_greedy5.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy5.svg b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy5.svg
index 29cb0c533..dc204993a 100644
--- a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy5.svg
+++ b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy5.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
From 6759e0982621a2c8dde00ae00de8b97039f4f114 Mon Sep 17 00:00:00 2001
From: Tetiana Aleksina <73138862+taleksina@users.noreply.github.com>
Date: Fri, 8 Sep 2023 20:26:54 +0300
Subject: [PATCH 15/22] Update witch_greedy5.svg
---
.../10-regexp-greedy-and-lazy/witch_greedy5.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy5.svg b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy5.svg
index dc204993a..80d99e58c 100644
--- a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy5.svg
+++ b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy5.svg
@@ -1 +1 @@
-
+
From 3aae663ff755c7f3ee2ea6c02c1c9a18df10351d Mon Sep 17 00:00:00 2001
From: Tetiana Aleksina <73138862+taleksina@users.noreply.github.com>
Date: Fri, 8 Sep 2023 20:34:15 +0300
Subject: [PATCH 16/22] Update witch_greedy6.svg
---
.../10-regexp-greedy-and-lazy/witch_greedy6.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy6.svg b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy6.svg
index 9f4b78b07..56e1ea415 100644
--- a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy6.svg
+++ b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy6.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
From 371ff35a48433ffa849f0bcc390525b11fd9b36f Mon Sep 17 00:00:00 2001
From: Tetiana Aleksina <73138862+taleksina@users.noreply.github.com>
Date: Sat, 9 Sep 2023 13:26:15 +0300
Subject: [PATCH 17/22] Update witch_greedy1.svg
---
.../10-regexp-greedy-and-lazy/witch_greedy1.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy1.svg b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy1.svg
index 76652f121..c129aad3a 100644
--- a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy1.svg
+++ b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy1.svg
@@ -1 +1 @@
-
+
From b20f4ac1d6c442783c0cb42d856a66c60797aa7e Mon Sep 17 00:00:00 2001
From: Tetiana Aleksina <73138862+taleksina@users.noreply.github.com>
Date: Sat, 9 Sep 2023 13:26:55 +0300
Subject: [PATCH 18/22] Update witch_greedy2.svg
---
.../10-regexp-greedy-and-lazy/witch_greedy2.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy2.svg b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy2.svg
index 9fc6bf00f..618c28e06 100644
--- a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy2.svg
+++ b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy2.svg
@@ -1 +1 @@
-
+
From 7c79087abd78a6ef7b7991220a678474439b7c55 Mon Sep 17 00:00:00 2001
From: Tetiana Aleksina <73138862+taleksina@users.noreply.github.com>
Date: Sat, 9 Sep 2023 13:28:25 +0300
Subject: [PATCH 19/22] Update witch_greedy3.svg
---
.../10-regexp-greedy-and-lazy/witch_greedy3.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy3.svg b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy3.svg
index c95f2ce14..b92626d55 100644
--- a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy3.svg
+++ b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy3.svg
@@ -1 +1 @@
-
+
From f19c60a73a1aa473543fbea261093a5257c92be3 Mon Sep 17 00:00:00 2001
From: Tetiana Aleksina <73138862+taleksina@users.noreply.github.com>
Date: Sat, 9 Sep 2023 13:28:55 +0300
Subject: [PATCH 20/22] Update witch_greedy4.svg
---
.../10-regexp-greedy-and-lazy/witch_greedy4.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy4.svg b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy4.svg
index f736059df..a3baf5a44 100644
--- a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy4.svg
+++ b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy4.svg
@@ -1 +1 @@
-
+
From f1018578d3e74e42a640d37ad735b6bc7827815e Mon Sep 17 00:00:00 2001
From: Tetiana Aleksina <73138862+taleksina@users.noreply.github.com>
Date: Sat, 9 Sep 2023 13:29:34 +0300
Subject: [PATCH 21/22] Update witch_greedy5.svg
---
.../10-regexp-greedy-and-lazy/witch_greedy5.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy5.svg b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy5.svg
index 80d99e58c..8a6decab8 100644
--- a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy5.svg
+++ b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy5.svg
@@ -1 +1 @@
-
+
From 7fdf3da8aba447450865ae9871feed34db549076 Mon Sep 17 00:00:00 2001
From: Tetiana Aleksina <73138862+taleksina@users.noreply.github.com>
Date: Sat, 9 Sep 2023 13:30:19 +0300
Subject: [PATCH 22/22] Update witch_greedy6.svg
---
.../10-regexp-greedy-and-lazy/witch_greedy6.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy6.svg b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy6.svg
index 56e1ea415..6f070358e 100644
--- a/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy6.svg
+++ b/9-regular-expressions/10-regexp-greedy-and-lazy/witch_greedy6.svg
@@ -1 +1 @@
-
+