pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/javascript-tutorial/uk.javascript.info/pull/706.patch

name == 'John')); // 3 ### filter -Метод `find` шукає один (перший) елемент, на якому функція-колбек поверне `true`. +Метод `find` повертає лише один елемент, на якому функція-колбек поверне `true`. На той випадок, якщо знайдених елементів може бути багато, передбачений метод [arr.filter(fn)](mdn:js/Array/filter). -Синтаксис цього методу схожий з `find`, але `filter` повертає масив з усіх відфільтрованих елементів: +Синтаксис цього методу схожий з `find`, але `filter` повертає масив з усіма елементами, які відповідають умові: ```js let results = arr.filter(function(item, index, array) { - // якщо true - елемент додається до результату, і перебір триває - // повертається порожній масив в разі, якщо нічого не знайдено + // якщо true - елемент додається до масиву з результатом, і перебір продовжується. По закінченню повертається масив з результатами. + // якщо ні один з елементів не відповідає умові, то повертається порожній масив. }); ``` @@ -418,7 +418,7 @@ alert( arr ); // *!*1, 15, 2*/!* Буквально, елементи перетворюються в рядки при порівнянні. Для рядків застосовується лексикографічний порядок, і дійсно виходить, що `"2"> "15"`. -Щоб використовувати наш власний порядок сортування, нам потрібно надати функцію як аргумент `arr.sort()`. +Щоб використовувати наш власний порядок сортування, нам потрібно надати функцію аргументом в `arr.sort()`. Функція має порівняти два довільних значення та повернути: @@ -450,9 +450,9 @@ alert(arr); // *!*1, 2, 15*/!* Тепер все працює як треба. -Візьмімо паузу і подумаємо, що ж відбувається. Згаданий раніше масив `arr` може бути масивом чого завгодно, вірно? Він може містити числа, рядки, обʼєкти або щось ще. У нас є набір якихось елементів. Щоб впорядкувати його, нам потрібна функція, яка визначає порядок, яка знає, як порівнювати його елементи. За замовчуванням елементи сортуються як рядки. +Давайте відволічемось і подумаємо, що ж відбувається. Згаданий раніше масив `arr` може бути масивом з чим-завгодно, вірно? Він може містити числа, рядки, обʼєкти або щось ще. У нас є набір якихось елементів. Щоб впорядкувати його, нам потрібна функція, яка визначає порядок, яка знає, як порівнювати його елементи. За замовчуванням елементи сортуються як рядки. -Метод `arr.sort(fn)` реалізує загальний алгоритм сортування. Нам не потрібно піклуватися про те, як він працює всередині (в більшості випадків це оптимізоване [швидке сортування](https://en.wikipedia.org/wiki/Quicksort) чи [Timsort](https://en.wikipedia.org/wiki/Timsort)). Реалізується прохід по масиву, порівнюються його елементи за допомогою наданої функції і змінюється їх порядок. Все, що залишається нам, це надати `fn`, яка робить це порівняння. +Метод `arr.sort(fn)` реалізує загальний алгоритм сортування. Нам не потрібно піклуватися про те, як він працює всередині (в більшості випадків це оптимізоване [швидке сортування](https://en.wikipedia.org/wiki/Quicksort) чи [Timsort](https://en.wikipedia.org/wiki/Timsort)). Реалізується прохід по масиву, порівнюються його елементи за допомогою наданої функції і змінюється їх порядок. Все, що треба від нас - це надати `fn`, яка робить це порівняння. До речі, якщо ми коли-небудь захочемо дізнатися, які елементи порівнюються -- ніщо не заважає нам вивести їх на екран: @@ -490,9 +490,9 @@ arr.sort( (a, b) => a - b ); ```` ````smart header="Використовуйте `localeCompare` для рядків" -Памʼятаєте алгоритм порівняння [рядків](info:string#correct-comparisons)? Він порівнює літери за їх кодами за замовчуванням. +Памʼятаєте алгоритм порівняння [рядків](info:string#correct-comparisons)? За замовчуванням він порівнює літери за їх кодами. -Для багатьох алфавітів краще використовувати метод `str.localeCompare` для правильного сортування літер, як наприклад `Ö`. +Для багатьох алфавітів краще використовувати метод `str.localeCompare` для правильного сортування літер, таких як `Ö`. Наприклад, давайте відсортуємо кілька країн німецькою мовою: @@ -522,28 +522,28 @@ alert( arr ); // 5,4,3,2,1 ### split та join -Ситуація з реального життя. Ми пишемо додаток для обміну повідомленнями, і відвідувач вводить імена тих, кому його відправити, через кому: Вася, Петя, Маша. Але нам-то набагато зручніше працювати з масивом імен, ніж з одним рядком. Як його отримати? +Ситуація з реального життя. Ми пишемо додаток для обміну повідомленнями, і відвідувач вводить імена тих, кому його відправити, через кому: Васько, Ярик, Марійка. Але нам то набагато зручніше працювати з масивом імен, ніж з одним рядком. Як отримати масив? -Метод [str.split(delim)](mdn:js/String/split) саме це і робить. Він розбиває рядок на масив по заданому роздільнику `delim`. +Метод [str.split(delim)](mdn:js/String/split) саме це і робить. Він розбиває рядок на масив по заданому роздільнику `delim` (з англ. deliminator - роздільник). У прикладі нижче таким роздільником є ​​рядок з коми та пропуску. ```js run -let names = 'Вася, Петя, Маша'; +let names = 'Васько, Ярик, Марійка'; let arr = names.split(', '); for (let name of arr) { - alert( `A message to ${name}.` ); // Повідомлення отримають: Вася (і інші імена) + alert( `A message to ${name}.` ); // Повідомлення отримають: Васько (і інші імена) } ``` У методу split є необовʼязковий другий числовий аргумент -- обмеження на кількість елементів в масиві. Якщо їх більше, ніж вказано, то залишок масиву буде відкинутий. На практиці це рідко використовується: ```js run -let arr = 'Вася, Петя, Маша, Іван'.split(', ', 2); +let arr = 'Васько, Ярик, Марійка, Івасик'.split(', ', 2); -alert(arr); // Вася, Петя +alert(arr); // Васько, Ярик ``` ````smart header="Розбивка на букви" @@ -556,16 +556,16 @@ alert( str.split('') ); // t,e,s,t ``` ```` -Виклик [arr.join(glue)](mdn:js/Array/join) робить в точності протилежне split. Він створює рядок з елементів `arr`, вставляючи `glue` між ними. +Виклик [arr.join(glue)](mdn:js/Array/join) робить в точності протилежне split. Він створює рядок з елементів `arr`, вставляючи `glue` між ними (з англ. glue - клей). Наприклад: ```js run -let arr = ["Вася", "Петя", "Маша"]; +let arr = ["Васько", "Ярик", "Марійка"]; let str = arr.join(';'); // обʼєднуємо масив в рядок за допомогою ";" -alert( str ); // Вася;Петя;Маша +alert( str ); // Васько;Ярик;Марійка ``` ### reduce/reduceRight @@ -588,14 +588,14 @@ let value = arr.reduce(function(accumulator, item, index, array) { Аргументи: -- `accumulator` -- результат попереднього виклику цієї функції, дорівнює `initial` при першому виклику (якщо переданий `initial`), +- `accumulator` -- (з англ. накопичувач) результат попереднього виклику цієї функції. При першому виклику дорівнює `initial`(якщо `initial` переданий), - `item` -- черговий елемент масиву, -- `index` -- його індекс, +- `index` -- індекс чергового елемента, - `array` -- сам масив. -При виконанні функції результат її виклику на попередньому елементі масиву передається як перший аргумент. +При виконанні функції результат її попереднього виклику передається на наступний виклик в якості першого аргумента. -Зрозуміти простіше, якщо думати про перший аргумент як «збирач» результатів попередніх викликів функції. Після закінчення він стає результатом `reduce`. +Зрозуміти простіше, якщо думати про перший аргумент як про «накопичував» результатів попередніх викликів функції. Після закінчення він стає результатом `reduce`. Звучить складно? @@ -615,9 +615,9 @@ alert(result); // 15 Давайте детальніше розберемо, як він працює. -1. При першому запуску `sum` дорівнює `initial` (останній аргумент `reduce`), тобто `0`, а `current` -- перший елемент масиву, рівний `1`. Таким чином, результат функції дорівнює `1`. -2. При другому запуску `sum = 1`, і до нього ми додаємо другий елемент масиву (`2`). -3. При третьому запуску `sum = 3`, до якого ми додаємо наступний елемент, і так далі... +1. При першому запуску `sum` дорівнює `initial` (останній аргумент `reduce`), тобто `0`. А `current` -- перший елемент масиву, рівний `1`. Таким чином, після першого запуску значення `sum` стає `1`. +2. При другому запуску накопичувач `sum` уже дорівнює `1`, і до нього ми додаємо другий елемент масиву (`2`). Таким чином, після другого запуску значення `sum` стає `2`. +3. При третьому запуску `sum` дорівнює `3`. І до нього ми додаємо наступний елемент, і так далі... Потік обчислень виходить такий: @@ -635,7 +635,7 @@ alert(result); // 15 Тут чітко видно, як результат попереднього виклику передається в перший аргумент наступного. -Ми також можемо опустити початкове значення: +Ми також можемо не задавати початкове (англ. initial) значення: ```js run let arr = [1, 2, 3, 4, 5]; @@ -648,9 +648,9 @@ alert( result ); // 15 Результат той самий. Це тому, що при відсутності `initial` в якості першого значення береться перший елемент масиву, а перебір стартує з другого. -Таблиця розрахунків така ж, як і вище, без першого рядка. +Таблиця розрахунків така ж, як і вище, просто без першого рядка. -Але таке використання вимагає крайньої обережності. Якщо масив порожній, то виклик `reduce` без початкового значення видасть помилку. +Але таке використання вимагає неймовірної обережності. Якщо масив порожній, то виклик `reduce` без початкового значення видасть помилку. Ось приклад: @@ -658,7 +658,7 @@ alert( result ); // 15 let arr = []; // Error: Reduce of empty array with no initial value -// якби існувало початкове значення, reduce повернув би його для порожнього масиву. +// якби існувало початкове значення, reduce повернув би його при порожньому масиві. arr.reduce((sum, current) => sum + current); ``` @@ -677,7 +677,7 @@ alert(typeof {}); // обʼєкт alert(typeof []); // також обʼєкт ``` -...Але масиви використовуються настільки часто, що для цього придумали спеціальний метод: [Array.isArray(value)](mdn:js/Array/isArray). Він повертає `true`, якщо `value` -- це масив, інакше `false`. +...Але масиви використовуються настільки часто, що для цього придумали спеціальний метод: [Array.isArray(value)](mdn:js/Array/isArray). Він повертає `true`, якщо `value` -- це масив, і `false` якщо ні. ```js run alert(Array.isArray({})); // false @@ -707,37 +707,37 @@ arr.map(func, thisArg); ```js run let army = { - minAge: 18, - maxAge: 27, - canJoin(user) { - return user.age >= this.minAge && user.age < this.maxAge; + minAge: 25, + maxAge: 60, + canBeBussified(user) { + return user.age >= this.minAge && user.age <= this.maxAge; } }; let users = [ - {age: 16}, - {age: 20}, - {age: 23}, - {age: 30} + {age: 19}, + {age: 26}, + {age: 33}, + {age: 61} ]; *!* -// знайти користувачів, для яких army.canJoin повертає true -let soldiers = users.filter(army.canJoin, army); +// знайти користувачів, яких можна бусифікувати (для яких army.canBeBussified повертає true) +let soldiers = users.filter(army.canBeBussified, army); */!* alert(soldiers.length); // 2 -alert(soldiers[0].age); // 20 -alert(soldiers[1].age); // 23 +alert(soldiers[0].age); // 26 +alert(soldiers[1].age); // 33 ``` -Якби ми в прикладі вище використовували просто `users.filter(army.canJoin)`, то виклик `army.canJoin` був би в режимі окремої функції, з `this=undefined`. Це призвело б до помилки. +Якби ми в прикладі вище використовували просто `users.filter(army.canBeBussified)`, то виклик `army.canBeBussified` був би в режимі окремої функції, з `this=undefined`. Це призвело б до помилки. -Виклик `users.filter(army.canJoin, army)` можна замінити на `users.filter(user => army.canJoin(user))`, який робить те ж саме. Останній запис використовується навіть частіше, оскільки стрілочна функція більш наочна. +Виклик `users.filter(army.canBeBussified, army)` можна замінити на `users.filter(user => army.canBeBussified(user))`, який робить те ж саме. Останній запис використовується навіть частіше, оскільки стрілочна функція більш наочна. ## Підсумки -Шпаргалка по методам масиву: +Шпаргалка з методів масиву: - Для додавання/видалення елементів: - `push(... items)` -- додає елементи до кінця, @@ -750,9 +750,9 @@ alert(soldiers[1].age); // 23 - Для пошуку серед елементів: - `indexOf/lastIndexOf(item, pos)` -- шукає `item`, починаючи з позиції `pos`, і повертає його індекс або `-1`, якщо нічого не знайдено. - - `includes(value)` -- повертає `true`, якщо в масиві є елемент `value`, в іншому випадку `false`. - - `find/filter(func)` -- фільтрує елементи через функцію і віддається перше/всі значення, при проходженні яких функція повертає `true`. - - `findIndex` схожий на `find`, але повертає індекс замість значення. + - `includes(value)` -- повертає `true`, якщо в масиві знайдено елемент `value`, або `false` якщо не знайдено. + - `find/filter(func)` -- фільтрують елементи через функцію і повертають перший/всі елементи, при використинні яких функція повертає `true`. І `undefined`/`[]` якщо таких елементів не знайдено. + - `findIndex` схожий на `find`, але повертає індекс замість значення. Або `-1` якщо не знайшов. - Для перебору елементів: - `forEach(func)` -- викликає `func` для кожного елемента. Нічого не повертає. @@ -761,11 +761,11 @@ alert(soldiers[1].age); // 23 - `map(func)` -- створює новий масив з результатів виклику `func` для кожного елемента. - `sort(func)` -- сортує масив «на місці», а потім повертає його. - `reverse()` -- «на місці» змінює порядок елементів на протилежний і повертає змінений масив. - - `split/join` -- перетворює рядок в масив і назад. - - `reduce(func, initial)` -- обчислює одне значення на основі всього масиву, викликаючи `func` для кожного елемента і передаючи проміжний результат між викликами. + - `split/join` -- перетворюють рядок в масив і назад. + - `reduce(func, initial)` -- обчислює накопичуване значення на основі всього масиву, викликаючи `func` для кожного елемента і передаючи проміжний результат між викликами. - Додатково: - - `Array.isArray(value)` перевіряє, чи є `value` масивом, якщо так, повертає `true`, інакше `false`. + - `Array.isArray(value)` перевіряє, чи є `value` масивом, якщо так, повертає `true`, і `false` якщо ні. Зверніть увагу, що методи `sort`, `reverse` та `splice` змінюють поточний масив. @@ -773,7 +773,7 @@ alert(soldiers[1].age); // 23 - [arr.some(fn)](mdn:js/Array/some)/[arr.every(fn)](mdn:js/Array/every) перевіряють масив. -Функція `fn` викликається для кожного елемента масиву, подібного до `map`. Якщо будь-які/усі результати є `true`, повертає `true`, інакше `false`. +Функція `fn` викликається для кожного елемента масиву, подібно до `map`. Якщо будь-які/усі результати є `true`, повертає `true`, інакше `false`. Ці методи поводяться приблизно як оператори `||` та `&&`. Якщо `fn` повертає істинне значення, `arr.some()` негайно повертає `true` і припиняє ітерацію по решті елементів. Якщо `fn` повертає хибне значення, `arr.every()` негайно повертає `false` і припиняє ітерацію по решті елементів. @@ -789,7 +789,7 @@ alert(soldiers[1].age); // 23 - [arr.fill(value, start, end)](mdn:js/Array/fill) -- заповнює масив повторюваними `value`, починаючи з індексу `start` до `end`. -- [arr.copyWithin(target, start, end)](mdn:js/Array/copyWithin) -- копіює свої елементи, починаючи з `start` і закінчуючи `end`, в власну позицію `target` (перезаписує існуючі). +- [arr.copyWithin(target, start, end)](mdn:js/Array/copyWithin) -- копіює свої елементи, починаючи з `start` і закінчуючи `end`, в власну позицію `target` (перезаписучи існуючі). - [arr.flat(depth)](mdn:js/Array/flat)/[arr.flatMap(fn)](mdn:js/Array/flatMap) -- створює новий, плоский масив з багатовимірного масиву. @@ -797,6 +797,6 @@ alert(soldiers[1].age); // 23 На перший погляд, може здатися, що існує дуже багато різних методів, які досить складно запамʼятати. Але це тільки так здається. -Уважно вивчіть шпаргалку, представлену вище, а потім, щоб попрактикуватися, вирішите завдання, запропоновані в цьому розділі. Так ви отримаєте необхідний досвід в правильному використанні методів масиву. +Уважно вивчіть шпаргалку, представлену вище, а потім, щоб попрактикуватися, повирішуйте завдання, запропоновані в цьому розділі. Так ви отримаєте необхідний досвід в правильному використанні методів масиву. -Кожного разу, коли вам буде необхідно щось зробити з масивом, а ви не знаєте, як це зробити -- приходьте сюди, дивіться на таблицю і шукайте правильний метод. Приклади допоможуть вам все зробити правильно, і незабаром ви швидко запамʼятайте методи без особливих зусиль. +Кожного разу, коли вам буде необхідно щось зробити з масивом, а ви не знаєте як це зробити -- приходьте сюди, дивіться на таблицю і шукайте правильний метод. Приклади допоможуть вам все зробити правильно, і незабаром ви швидко запамʼятайте методи без надмірних зусиль. pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy