Skip to content

Commit b9a8ba8

Browse files
authored
Merge pull request #317 from GaidaiAndrii/patch-2
Update article.md
2 parents 073709f + ee888ad commit b9a8ba8

1 file changed

Lines changed: 30 additions & 30 deletions

File tree

1-js/05-data-types/04-array/article.md

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
Об’єкти дозволяють зберігати набори значень з ключами. Це чудово.
44

5-
Але досить часто ми розуміємо, що нам необхідна впорядкована колекція даних, яка складається з 1-го, 2-го, 3-го і т.п елементів. Наприклад, така колеція може знадобитись для зберігання списку користувачів, товарів, HTML елементів та ін.
5+
Але досить часто ми розуміємо, що нам необхідна впорядкована колекція даних, яка складається з 1-го, 2-го, 3-го і т.д. елементів. Наприклад, така колеція може знадобитись для зберігання списку користувачів, товарів, HTML елементів та ін.
66

7-
Використовувати об’єкти в такому випадку не зручно, тому що вони не надають методів управління порядком елементів. Ми не можемо вставити нову властивість "між" існуючих. Об’єкти просто не призначені для такого.
7+
Використовувати об’єкти в такому випадку не зручно, тому що вони не надають методів управління порядком елементів. Ми не можемо вставити нову властивість "між" існуючих. Об’єкти просто не призначені для цього.
88

99
Для зберігання впорядкованих колекцій існує інший тип даних, який має назву масив, `Array`.
1010

@@ -25,7 +25,7 @@ let fruits = ["Apple", "Orange", "Plum"];
2525

2626
Елементи масиву нумеруються починаючи з нуля.
2727

28-
Ми можемо отримати елементи масиву, вказавши його номер в квадратних дужках:
28+
Ми можемо отримати елемент масиву, вказавши його номер в квадратних дужках:
2929

3030
```js run
3131
let fruits = ["Apple", "Orange", "Plum"];
@@ -63,7 +63,7 @@ let fruits = ["Apple", "Orange", "Plum"];
6363
alert( fruits ); // Apple,Orange,Plum
6464
```
6565

66-
У масиви можуть зберігатись елементи будь-якого типу.
66+
У масивах можуть зберігатись елементи будь-якого типу.
6767

6868
Наприклад:
6969

@@ -89,7 +89,7 @@ let fruits = [
8989
];
9090
```
9191
92-
Кома в кінці спрощує процес додавання/видалення елементів, тому що всі рядки стають ідентичними.
92+
Кома в кінці спрощує процес додавання/видалення елементів, тому що всі рядки стають однотипними.
9393
````
9494

9595

@@ -98,7 +98,7 @@ let fruits = [
9898
[Черга](https://uk.wikipedia.org/wiki/Черга_(структура_даних)) — один з найбільш популярних варіантів використання об’єкту. У ком’ютерних науках так позначають колекцію елементів, яка підтримує дві операції:
9999

100100
- `push` додає елемент у кінець списку.
101-
- `shift` видаляє елемент на початку, зміщчуючи чергу, таким чином другий елемент стає першим.
101+
- `shift` видаляє елемент на початку, зміщчуючи чергу, таким чином, що 2-й елемент стає 1-м.
102102

103103
![](queue.svg)
104104

@@ -111,7 +111,7 @@ let fruits = [
111111
Вона підтримує два типи операцій:
112112

113113
- `push` додає елементи в кінець.
114-
- `pop` видаляє крайній елемент.
114+
- `pop` видаляє елемент з кінця.
115115

116116
Таким чином нові елементи завжди додаються або видаляються з "кінця".
117117

@@ -159,7 +159,7 @@ let fruits = [
159159
```js run
160160
let fruits = ["Apple", "Orange", "Pear"];
161161

162-
alert( fruits.shift() ); // видаляємо Apple and виводимо його
162+
alert( fruits.shift() ); // видаляємо Apple та виводимо його
163163

164164
alert( fruits ); // Orange, Pear
165165
```
@@ -189,11 +189,11 @@ alert( fruits );
189189

190190
## Внутрішня структура масивів
191191

192-
Масив це спеціальний тип об’єктів. Квадратні дужки використовують для доступу до властивості `arr[0]`, що в свою чергу прийшло з синтаксису об’єктів. Це теж саме, що доступ до властивості об’єкта `obj[key]`, де `arr` це об’єкт в якому числа використовуються як ключі.
192+
Масив -- це спеціальний вид об’єктів. Квадратні дужки використовують для доступу до властивості `arr[0]`, що в свою чергу прийшло з синтаксису об’єктів. Це теж саме, що доступ до властивості об’єкта `obj[key]`, де `arr` це об’єкт в якому числа використовуються як ключі.
193193

194194
Масиви розширюють функціональність об’єкта тим, що надають можливість працювати з упорядкованими колекціями даних, а також надають доступ до властивості `length`. Але в основі це досі об’єкт.
195195

196-
Запам’ятайте, JavaScript містить лише 8 базових типів даних (більше інформації у розділі [Типи даних](info:types)). Масив це об’єкт, який веде себе як об’єкт.
196+
Запам’ятайте, JavaScript містить лише 8 базових типів даних (більше інформації у розділі [Типи даних](info:types)). Масив -- це об’єкт, який поводить себе як об’єкт.
197197

198198
Наприклад, копіюється за посиланням:
199199

@@ -209,7 +209,7 @@ arr.push("Pear"); // зміна масиву за посиланням
209209
alert( fruits ); // Banana, Pear - наразі два елемента
210210
```
211211

212-
...Але те, що робить масиви дійсно особливими – це їх внутрішнє представлення. Рушій JavaScript намагається зберігати елементи масиву у неперервній області пам’яті, один за одним, як це представлено на ілюстраціях в цьому розділі, а також інші способи оптимізації, що дозволяють масивам працювати дуже швидко.
212+
...Але те, що робить масиви дійсно особливими – це їх внутрішнє представлення. Рушій JavaScript намагається зберігати елементи масиву у неперервній області пам’яті, один за одним, як це представлено на ілюстраціях в цьому розділі, а також застосовує інші способи оптимізації, що дозволяють масивам працювати дуже швидко.
213213

214214
Проте масиви втратять всю свою ефективність, якщо ми перестанемо працювати з ними як з "упорядкованою колекцією даних" і почнемо використовувати як звичайний об’єкт.
215215

@@ -230,14 +230,14 @@ fruits.age = 25; // створюємо властивість з довільн
230230
Варіанти неправильного використання масивів:
231231

232232
- Додавання нечислових властивостей, таких як `arr.test = 5`.
233-
- Створення "дирок", наприклад: `arr[0]` а за ним `arr[1000]` (та нічого між цими елементами).
233+
- Створення "дірок", наприклад: `arr[0]` а за ним `arr[1000]` (та нічого між цими елементами).
234234
- Заповнення масиву в зворотньому порядку, наприклад: `arr[1000]`, `arr[999]` і т. д.
235235

236-
Будь ласка, думайте про масив як про особливу структуру з "впорядкованими даними". Вони надають спеціальні методи для цього. Масиви дуже ретельно налаштовані на роботу з неперервними впорядкованими даними, тому використовуйте їх саме таким чином. Тому, якщо вам необхідні довільні ключі, дуже ймовірно, що вам більше підійдуть звичайні об’єкти `{}`.
236+
Будь ласка, думайте про масиви як про особливі структури для роботи з _впорядкованими даними_. Вони надають спеціальні методи для цього. Масиви дуже ретельно налаштовані на роботу з неперервними впорядкованими даними, тому використовуйте їх саме таким чином. Тому, якщо вам необхідні довільні ключі, дуже ймовірно, що вам більше підійдуть звичайні об’єкти `{}`.
237237

238238
## Продуктивність
239239

240-
Методи `push/pop` працюють швидко, на відміну від методів `shift/unshift` які працюють повільно.
240+
Методи `push/pop` працюють швидко, на відміну від методів `shift/unshift`, які працюють повільно.
241241

242242
![](array-speed.svg)
243243

@@ -247,7 +247,7 @@ fruits.age = 25; // створюємо властивість з довільн
247247
fruits.shift(); // видалити один елемент з початку
248248
```
249249

250-
Але недостатньо просто взяти та видалити елемент з номером `0`. В такому випадку всі інші елементи також необхідно пронумерувати ще раз.
250+
Але недостатньо просто взяти та видалити елемент з номером `0`. Всі інші елементи також необхідно пронумерувати ще раз.
251251

252252
Операція `shift` має виконати 3 дії:
253253

@@ -261,7 +261,7 @@ fruits.shift(); // видалити один елемент з початку
261261

262262
Теж саме відбувається з методом `unshift`: для того, щоб додати елемент в початок масиву, необхідно спочатку перемістити всі елементи масиву вправо збільшуючи їх індекси.
263263

264-
А що щодо методів `push/pop`? Вони нічого не переміщують. Для видалення елементу з кінця масиву метод `pop` очищає індекс та скорочує властивість `length`.
264+
А як щодо методів `push/pop`? Вони нічого не переміщують. Для видалення елементу з кінця масиву метод `pop` очищає індекс та скорочує властивість `length`.
265265

266266
Дії при операції `pop`:
267267

@@ -316,18 +316,18 @@ for (let key in arr) {
316316

317317
Але насправді це погана ідея. Існують потеційні проблеми:
318318

319-
1. Цикл `for..in` ітерується по *всіх властивостям*, не тільки по числових.
319+
1. Цикл `for..in` ітерується по *всіх властивостях*, не тільки по числових.
320320

321321
У браузерах та різних програмних середовищах існують масивоподібні об’єкти, *які виглядають як масив*. Тобто вони мають властивість `length` та індекси, проте вони також містять інші нечислові властивості і методи, які нам часто не потрібні. Цикл `for..in` відобразить і їх. Тому, коли нам необхідно працювати з масивами, ці "екстра" властивості можуть стати проблемою.
322322

323-
2. Цикл `for..in` оптимізований для довільних об’єктів, не для масивів, і тому це в 10-100 разів повільніше. Звісно, це все одно дуже швидко. Збільшення швидкості виконання має значення лише у *вузьких місцях*. Але ми все одно повинні бути обережні з відмінностями.
323+
2. Цикл `for..in` оптимізований для довільних об’єктів, не для масивів, і тому в 10-100 разів повільніше. Звісно, це все одно дуже швидко. Збільшення швидкості виконання має значення лише у *вузьких місцях*. Але ми все одно повинні бути обережні з відмінностями.
324324

325325
Словом, не варто використовувати цикл `for..in` для масивів.
326326

327327

328328
## Декілька слів про "length"
329329

330-
Властивість `length` спрацьовує автоматично, коли масив змінився. Якщо бути точнішим, то `length` відображає не кількість елементів в масиві, а індекс останнього елементу плюс один.
330+
Властивість `length` оновлюється автоматично, коли масив змінився. Якщо бути точнішим, то `length` відображає не кількість елементів в масиві, а індекс останнього елементу плюс один.
331331

332332
Наприклад, один елемент з великим індексом дасть велику довжину:
333333

@@ -340,18 +340,18 @@ alert( fruits.length ); // 124
340340

341341
Зверніть увагу, що зазвичай ми не використовуємо масив подібним чином.
342342

343-
Інший цікавий момент стосовно властивості `length` - його можна перезаписати.
343+
Інший цікавий момент стосовно властивості `length` -- її можна перезаписати.
344344

345-
Якщо ми вручну збільшимо `length`, нічого цікавого не відбудеться. Але якщо зменшимо, масив стане коротшим, цей процес незворотній, наприклад:
345+
Якщо ми вручну збільшимо `length`, нічого цікавого не відбудеться. Але якщо зменшимо, масив стане коротшим. Цей процес незворотній, наприклад:
346346

347347
```js run
348348
let arr = [1, 2, 3, 4, 5];
349349

350-
arr.length = 2; // зкорочуємо до двох елементів
350+
arr.length = 2; // скорочуємо до двох елементів
351351
alert( arr ); // [1, 2]
352352

353-
arr.length = 5; // повертаємо попередню довжину
354-
alert( arr[3] ); // undefined: the values do not return
353+
arr.length = 5; // повертаємо попередню довжину ...
354+
alert( arr[3] ); // undefined: ..., а видалені значення не повертаються
355355
```
356356

357357
Отож, найпростіший метод очистки масиву це: `arr.length = 0;`.
@@ -367,7 +367,7 @@ let arr = *!*new Array*/!*("Apple", "Pear", "etc");
367367

368368
Він використовується рідше, адже квадратні дужки коротші `[]`. А також має певну особливість.
369369

370-
Якщо `new Array` викликається з одним аргументом, а саме числом, він створить пустий масив з довжиною, яка дорівнює *цьому числу*.
370+
Якщо `new Array` викликається з одним аргументом, а саме числом, він створить порожній масив з довжиною, яка дорівнює *цьому числу*.
371371

372372
Подивімось, як можна завдати собі ведмежої послуги:
373373

@@ -376,10 +376,10 @@ let arr = new Array(2); // чи створиться масив [2] ?
376376

377377
alert( arr[0] ); // undefined! елементи відсутні.
378378

379-
alert( arr.length ); // length 2
379+
alert( arr.length ); // довжина 2
380380
```
381381

382-
Для того, щоб позбавитись таких сюрпризів, як правило, ми використовуємо квадратні дужки `[]`, якщо тільки ми дійсно не маємо причини для використання методу `new Array`.
382+
Для того, щоб позбутись таких сюрпризів, як правило, ми використовуємо квадратні дужки `[]`, якщо тільки ми дійсно не маємо причини для використання методу `new Array`.
383383

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

@@ -417,9 +417,9 @@ alert( [1] + 1 ); // "11"
417417
alert( [1,2] + 1 ); // "1,21"
418418
```
419419

420-
Масиви не мають `Symbol.toPrimitive`, або функціонуючого `valueOf`, вони реалізують лише метод `toString` таким чином, що `[]` стає пустою строкою, `[1]` стає `"1"` або `[1,2]` стає `"1,2"`.
420+
Масиви не мають `Symbol.toPrimitive`, або функціонуючого `valueOf`, вони реалізують лише метод `toString` таким чином, що `[]` стає порожнім рядком, `[1]` стає `"1"` або `[1,2]` стає `"1,2"`.
421421

422-
Коли бінарний оператор `"+"` додає щось до рядка, це конвертується в строку та виглядає наступним чином:
422+
Коли бінарний оператор `"+"` додає щось до рядка, це конвертується в рядок та виглядає наступним чином:
423423

424424
```js run
425425
alert( "" + 1 ); // "1"
@@ -476,7 +476,7 @@ alert('0' == '' ); // false, тут немає конвертації типів
476476

477477
## Підсумки
478478

479-
Масив це особливий тип об’єкту, створений для зберігання та керування впорядкованих даних.
479+
Масив -- це особливий вид об’єкту, створений для зберігання та обробки _впорядкованих елементів_.
480480

481481
- Оголошення:
482482

0 commit comments

Comments
 (0)