You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/05-data-types/04-array/article.md
+30-30Lines changed: 30 additions & 30 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,9 +2,9 @@
2
2
3
3
Об’єкти дозволяють зберігати набори значень з ключами. Це чудово.
4
4
5
-
Але досить часто ми розуміємо, що нам необхідна впорядкована колекція даних, яка складається з 1-го, 2-го, 3-го і т.п елементів. Наприклад, така колеція може знадобитись для зберігання списку користувачів, товарів, HTML елементів та ін.
5
+
Але досить часто ми розуміємо, що нам необхідна впорядкована колекція даних, яка складається з 1-го, 2-го, 3-го і т.д. елементів. Наприклад, така колеція може знадобитись для зберігання списку користувачів, товарів, HTML елементів та ін.
6
6
7
-
Використовувати об’єкти в такому випадку не зручно, тому що вони не надають методів управління порядком елементів. Ми не можемо вставити нову властивість "між" існуючих. Об’єкти просто не призначені для такого.
7
+
Використовувати об’єкти в такому випадку не зручно, тому що вони не надають методів управління порядком елементів. Ми не можемо вставити нову властивість "між" існуючих. Об’єкти просто не призначені для цього.
8
8
9
9
Для зберігання впорядкованих колекцій існує інший тип даних, який має назву масив, `Array`.
10
10
@@ -25,7 +25,7 @@ let fruits = ["Apple", "Orange", "Plum"];
25
25
26
26
Елементи масиву нумеруються починаючи з нуля.
27
27
28
-
Ми можемо отримати елементи масиву, вказавши його номер в квадратних дужках:
28
+
Ми можемо отримати елемент масиву, вказавши його номер в квадратних дужках:
29
29
30
30
```js run
31
31
let fruits = ["Apple", "Orange", "Plum"];
@@ -63,7 +63,7 @@ let fruits = ["Apple", "Orange", "Plum"];
63
63
alert( fruits ); // Apple,Orange,Plum
64
64
```
65
65
66
-
У масиви можуть зберігатись елементи будь-якого типу.
66
+
У масивах можуть зберігатись елементи будь-якого типу.
67
67
68
68
Наприклад:
69
69
@@ -89,7 +89,7 @@ let fruits = [
89
89
];
90
90
```
91
91
92
-
Кома в кінці спрощує процес додавання/видалення елементів, тому що всі рядки стають ідентичними.
92
+
Кома в кінці спрощує процес додавання/видалення елементів, тому що всі рядки стають однотипними.
93
93
````
94
94
95
95
@@ -98,7 +98,7 @@ let fruits = [
98
98
[Черга](https://uk.wikipedia.org/wiki/Черга_(структура_даних)) — один з найбільш популярних варіантів використання об’єкту. У ком’ютерних науках так позначають колекцію елементів, яка підтримує дві операції:
99
99
100
100
-`push` додає елемент у кінець списку.
101
-
-`shift` видаляє елемент на початку, зміщчуючи чергу, таким чином другий елемент стає першим.
101
+
-`shift` видаляє елемент на початку, зміщчуючи чергу, таким чином, що 2-й елемент стає 1-м.
102
102
103
103

104
104
@@ -111,7 +111,7 @@ let fruits = [
111
111
Вона підтримує два типи операцій:
112
112
113
113
-`push` додає елементи в кінець.
114
-
-`pop` видаляє крайній елемент.
114
+
-`pop` видаляє елемент з кінця.
115
115
116
116
Таким чином нові елементи завжди додаються або видаляються з "кінця".
117
117
@@ -159,7 +159,7 @@ let fruits = [
159
159
```js run
160
160
let fruits = ["Apple", "Orange", "Pear"];
161
161
162
-
alert( fruits.shift() ); // видаляємо Apple and виводимо його
162
+
alert( fruits.shift() ); // видаляємо Apple та виводимо його
163
163
164
164
alert( fruits ); // Orange, Pear
165
165
```
@@ -189,11 +189,11 @@ alert( fruits );
189
189
190
190
## Внутрішня структура масивів
191
191
192
-
Масив — це спеціальний тип об’єктів. Квадратні дужки використовують для доступу до властивості `arr[0]`, що в свою чергу прийшло з синтаксису об’єктів. Це теж саме, що доступ до властивості об’єкта `obj[key]`, де `arr` це об’єкт в якому числа використовуються як ключі.
192
+
Масив -- це спеціальний вид об’єктів. Квадратні дужки використовують для доступу до властивості `arr[0]`, що в свою чергу прийшло з синтаксису об’єктів. Це теж саме, що доступ до властивості об’єкта `obj[key]`, де `arr` це об’єкт в якому числа використовуються як ключі.
193
193
194
194
Масиви розширюють функціональність об’єкта тим, що надають можливість працювати з упорядкованими колекціями даних, а також надають доступ до властивості `length`. Але в основі це досі об’єкт.
195
195
196
-
Запам’ятайте, JavaScript містить лише 8 базових типів даних (більше інформації у розділі [Типи даних](info:types)). Масив — це об’єкт, який веде себе як об’єкт.
196
+
Запам’ятайте, JavaScript містить лише 8 базових типів даних (більше інформації у розділі [Типи даних](info:types)). Масив -- це об’єкт, який поводить себе як об’єкт.
197
197
198
198
Наприклад, копіюється за посиланням:
199
199
@@ -209,7 +209,7 @@ arr.push("Pear"); // зміна масиву за посиланням
209
209
alert( fruits ); // Banana, Pear - наразі два елемента
210
210
```
211
211
212
-
...Але те, що робить масиви дійсно особливими – це їх внутрішнє представлення. Рушій JavaScript намагається зберігати елементи масиву у неперервній області пам’яті, один за одним, як це представлено на ілюстраціях в цьому розділі, а також інші способи оптимізації, що дозволяють масивам працювати дуже швидко.
212
+
...Але те, що робить масиви дійсно особливими – це їх внутрішнє представлення. Рушій JavaScript намагається зберігати елементи масиву у неперервній області пам’яті, один за одним, як це представлено на ілюстраціях в цьому розділі, а також застосовує інші способи оптимізації, що дозволяють масивам працювати дуже швидко.
213
213
214
214
Проте масиви втратять всю свою ефективність, якщо ми перестанемо працювати з ними як з "упорядкованою колекцією даних" і почнемо використовувати як звичайний об’єкт.
- Додавання нечислових властивостей, таких як `arr.test = 5`.
233
-
- Створення "дирок", наприклад: `arr[0]` а за ним `arr[1000]` (та нічого між цими елементами).
233
+
- Створення "дірок", наприклад: `arr[0]` а за ним `arr[1000]` (та нічого між цими елементами).
234
234
- Заповнення масиву в зворотньому порядку, наприклад: `arr[1000]`, `arr[999]` і т. д.
235
235
236
-
Будь ласка, думайте про масив як про особливу структуру з "впорядкованими даними". Вони надають спеціальні методи для цього. Масиви дуже ретельно налаштовані на роботу з неперервними впорядкованими даними, тому використовуйте їх саме таким чином. Тому, якщо вам необхідні довільні ключі, дуже ймовірно, що вам більше підійдуть звичайні об’єкти `{}`.
236
+
Будь ласка, думайте про масиви як про особливі структури для роботи з _впорядкованими даними_. Вони надають спеціальні методи для цього. Масиви дуже ретельно налаштовані на роботу з неперервними впорядкованими даними, тому використовуйте їх саме таким чином. Тому, якщо вам необхідні довільні ключі, дуже ймовірно, що вам більше підійдуть звичайні об’єкти `{}`.
237
237
238
238
## Продуктивність
239
239
240
-
Методи `push/pop` працюють швидко, на відміну від методів `shift/unshift` які працюють повільно.
240
+
Методи `push/pop` працюють швидко, на відміну від методів `shift/unshift`, які працюють повільно.
fruits.shift(); // видалити один елемент з початку
248
248
```
249
249
250
-
Але недостатньо просто взяти та видалити елемент з номером `0`. В такому випадку всі інші елементи також необхідно пронумерувати ще раз.
250
+
Але недостатньо просто взяти та видалити елемент з номером `0`. Всі інші елементи також необхідно пронумерувати ще раз.
251
251
252
252
Операція `shift` має виконати 3 дії:
253
253
@@ -261,7 +261,7 @@ fruits.shift(); // видалити один елемент з початку
261
261
262
262
Теж саме відбувається з методом `unshift`: для того, щоб додати елемент в початок масиву, необхідно спочатку перемістити всі елементи масиву вправо збільшуючи їх індекси.
263
263
264
-
А що щодо методів `push/pop`? Вони нічого не переміщують. Для видалення елементу з кінця масиву метод `pop` очищає індекс та скорочує властивість `length`.
264
+
А як щодо методів `push/pop`? Вони нічого не переміщують. Для видалення елементу з кінця масиву метод `pop` очищає індекс та скорочує властивість `length`.
265
265
266
266
Дії при операції `pop`:
267
267
@@ -316,18 +316,18 @@ for (let key in arr) {
316
316
317
317
Але насправді це погана ідея. Існують потеційні проблеми:
318
318
319
-
1. Цикл `for..in` ітерується по *всіх властивостям*, не тільки по числових.
319
+
1. Цикл `for..in` ітерується по *всіх властивостях*, не тільки по числових.
320
320
321
321
У браузерах та різних програмних середовищах існують масивоподібні об’єкти, *які виглядають як масив*. Тобто вони мають властивість `length` та індекси, проте вони також містять інші нечислові властивості і методи, які нам часто не потрібні. Цикл `for..in` відобразить і їх. Тому, коли нам необхідно працювати з масивами, ці "екстра" властивості можуть стати проблемою.
322
322
323
-
2. Цикл `for..in` оптимізований для довільних об’єктів, не для масивів, і тому це в 10-100 разів повільніше. Звісно, це все одно дуже швидко. Збільшення швидкості виконання має значення лише у *вузьких місцях*. Але ми все одно повинні бути обережні з відмінностями.
323
+
2. Цикл `for..in` оптимізований для довільних об’єктів, не для масивів, і тому в 10-100 разів повільніше. Звісно, це все одно дуже швидко. Збільшення швидкості виконання має значення лише у *вузьких місцях*. Але ми все одно повинні бути обережні з відмінностями.
324
324
325
325
Словом, не варто використовувати цикл `for..in` для масивів.
326
326
327
327
328
328
## Декілька слів про "length"
329
329
330
-
Властивість `length`спрацьовує автоматично, коли масив змінився. Якщо бути точнішим, то `length` відображає не кількість елементів в масиві, а індекс останнього елементу плюс один.
330
+
Властивість `length`оновлюється автоматично, коли масив змінився. Якщо бути точнішим, то `length` відображає не кількість елементів в масиві, а індекс останнього елементу плюс один.
331
331
332
332
Наприклад, один елемент з великим індексом дасть велику довжину:
Він використовується рідше, адже квадратні дужки коротші `[]`. А також має певну особливість.
369
369
370
-
Якщо `new Array` викликається з одним аргументом, а саме числом, він створить пустий масив з довжиною, яка дорівнює *цьому числу*.
370
+
Якщо `new Array` викликається з одним аргументом, а саме числом, він створить порожній масив з довжиною, яка дорівнює *цьому числу*.
371
371
372
372
Подивімось, як можна завдати собі ведмежої послуги:
373
373
@@ -376,10 +376,10 @@ let arr = new Array(2); // чи створиться масив [2] ?
376
376
377
377
alert( arr[0] ); // undefined! елементи відсутні.
378
378
379
-
alert( arr.length ); //length 2
379
+
alert( arr.length ); //довжина 2
380
380
```
381
381
382
-
Для того, щоб позбавитись таких сюрпризів, як правило, ми використовуємо квадратні дужки `[]`, якщо тільки ми дійсно не маємо причини для використання методу `new Array`.
382
+
Для того, щоб позбутись таких сюрпризів, як правило, ми використовуємо квадратні дужки `[]`, якщо тільки ми дійсно не маємо причини для використання методу `new Array`.
383
383
384
384
## Багатовимірні масиви
385
385
@@ -417,9 +417,9 @@ alert( [1] + 1 ); // "11"
417
417
alert( [1,2] +1 ); // "1,21"
418
418
```
419
419
420
-
Масиви не мають `Symbol.toPrimitive`, або функціонуючого `valueOf`, вони реалізують лише метод `toString` таким чином, що `[]` стає пустою строкою, `[1]` стає `"1"` або `[1,2]` стає `"1,2"`.
420
+
Масиви не мають `Symbol.toPrimitive`, або функціонуючого `valueOf`, вони реалізують лише метод `toString` таким чином, що `[]` стає порожнім рядком, `[1]` стає `"1"` або `[1,2]` стає `"1,2"`.
421
421
422
-
Коли бінарний оператор `"+"` додає щось до рядка, це конвертується в строку та виглядає наступним чином:
422
+
Коли бінарний оператор `"+"` додає щось до рядка, це конвертується в рядок та виглядає наступним чином:
423
423
424
424
```js run
425
425
alert( ""+1 ); // "1"
@@ -476,7 +476,7 @@ alert('0' == '' ); // false, тут немає конвертації типів
476
476
477
477
## Підсумки
478
478
479
-
Масив — це особливий тип об’єкту, створений для зберігання та керування впорядкованих даних.
479
+
Масив -- це особливий вид об’єкту, створений для зберігання та обробки _впорядкованих елементів_.
0 commit comments