profile
viewpoint
If you are wondering where the data of this site comes from, please visit https://api.github.com/users/IhorHordiichuk/events. GitMemory does not store any data, but only uses NGINX to cache data for a period of time. The idea behind GitMemory is simply to give users a better reading experience.
Ihor Hordiichuk IhorHordiichuk Ukraine, Cherkasy

IhorHordiichuk/Dictionary 1

Словник розробника

IhorHordiichuk/badger 0

elementary OS app to remind you to be ergonomic

IhorHordiichuk/blanket 0

Listen to different sounds

IhorHordiichuk/ephemeral 0

A private-by-default, always-incognito browser for elementary OS

IhorHordiichuk/gse-disconnect-wifi 0

Gnome Shell Extension - Disconnect Wifi

IhorHordiichuk/LibreraReader 0

Book Reader for Android

IhorHordiichuk/maco-test 0

Test task for MA courses. Sorry for Bootstrap)

IhorHordiichuk/monitor 0

Manage processes and monitor system resources.

IhorHordiichuk/pantheon-tweaks 0

A system settings panel for the Pantheon desktop environment.

Pull request review commentrafaelmardojai/blanket

update ukrainian translation

 msgstr "Rafael Mardojai CM" #: data/com.rafaelmardojai.Blanket.gschema.xml:42 msgctxt "visible-name" msgid "'Default'"-msgstr ""+msgstr "Типово"

Sorry, didn't mention this.

IhorHordiichuk

comment created time in 9 days

PullRequestReviewEvent

push eventIhorHordiichuk/blanket

Ihor Hordiichuk

commit sha 705b23ce4b6a7d51332f9a6ad65476f1dbe115dd

add single quotes

view details

push time in 9 days

create barnchIhorHordiichuk/blanket

branch : update_ukrainian_translation

created branch time in 9 days

fork IhorHordiichuk/blanket

Listen to different sounds

fork in 9 days

PR opened IhorHordiichuk/blanket

Update upstream
+7558 -1376

0 comment

72 changed files

pr created time in 9 days

issue commentwebdoky/content

Flattening (результат виклику `Array.flat()` над масивом)

Я не готовий підтримати якийсь один варіант насправді. Я пошукав у словнику, звідти й пропозиція, але як буде зрозуміліше не знаю, тож і спитав, чи ба не з книги якої термін.

AdriandeCita

comment created time in 16 days

issue commentwebdoky/content

True - false, істина - ???

Я не проти «хибності». Але варто уточнювати, що «хибне твердження», оскільки хиба й вада надто загальні слова, які можуть стосуватися чого завгодно. Саме це я й мав на увазі. Бо сама «хиба» в цьому контексті сприймається, що хибно написаний вираз, а не булевий результат. З булевим теж треба визначитись. Вживаються і булевий, і логічний тип. Обидва — запозичені й рівнозначні. Головне послідовно вживати однаково, щоб не було мішанини.

AdriandeCita

comment created time in 16 days

Pull request review commentwebdoky/content

translate web-js-ref-global_objects-array-foreach page

+---+title: Array.prototype.forEach()+slug: Web/JavaScript/Reference/Global_Objects/Array/forEach+tags:+  - Array+  - ECMAScript 5+  - JavaScript+  - Method+  - Prototype+  - Reference+  - Polyfill+browser-compat: javascript.builtins.Array.forEach+---+{{JSRef}}++Метод **`forEach()`** виконує дану функцію один раз для кожного елементу масиву.++{{EmbedInteractiveExample("pages/js/array-foreach.html")}}++## Синтаксис++```js+// Стрілкова функція+forEach((element) => { ... } )+forEach((element, index) => { ... } )+forEach((element, index, array) => { ... } )++// Функція зворотного виклику+forEach(callbackFn)+forEach(callbackFn, thisArg)++// Функція зворотного виклику, оголошена на місці+forEach(function callbackFn(element) { ... })+forEach(function callbackFn(element, index) { ... })+forEach(function callbackFn(element, index, array){ ... })+forEach(function callbackFn(element, index, array) { ... }, thisArg)+```++### Параметри++- `callbackFn`++  - : Функція, яку буде викликано на кожному елементі. Приймає від одного до трьох аргументів:++    - `element`+      - : Поточний елемент масиву, який зараз опрацьовується.+    - `index` {{optional_inline}}+      - : Порядковий номер цього елементу в масиві.+    - `array` {{optional_inline}}+      - : Власне масив, на якому було викликано `forEach()`.++- `thisArg` {{optional_inline}}+  - : Значення, яке буде підставлено як `this` під час виконання `callbackFn`.++### Результат++`undefined`.++## Опис++Метод `forEach()` викликає подану функцію `callbackFn` один раз для кожного елементу в масиві, у порядку зростання їх порядкового номера. Функція не викликається для елементів, які було видалено, або які не було ініціалізовано. (для розріджених масивів [дивіться приклад нижче](#sparsearray).)++Функція `callbackFn` викликається з трьома аргументами:++1.  значення елементу+2.  порядковий номер елементу+3.  об'єкт масиву, який наразі опрацьовується++Якщо у `forEach()` задано параметр `thisArg`, його буде використано як значення `this` у функції зворотного виклику. В загальному випадку значення `this`, яке бачитиме функція `callback` визначається згідно з [загальними правилами визначення значення `this`, доступного для функції](/en-US/docs/Web/JavaScript/Reference/Operators/this).++Діапазон елементів, що опрацьовуються функцією `forEach()`, задається до першого виклику `callbackFn`. Елементи, які будуть присвоєні до індексів, що вже пройдені методом, або ж до індексів за межами цього діапазону, не будуть опрацьовані функцією `callbackFn`. Якщо наявні елементи змінюються чи видаляються, то до `callbackFn` буде передано їх фактичне значення на момент, коли функція `forEach()` їх опрацьовує. Ті елементи, які були видалені до того, як їх опрацювала функція, опрацьовані не будуть. Якщо елементи, які уже були опрацьовані, видаляються (наприклад, за допомогою {{jsxref("Array.prototype.shift()", "shift()")}}) під час проходження по масиву, наступні елементи буде пропущено. ([Дивіться цей приклад нижче](#modifying_the_array_during_iteration).)++**Обережно:** Одночасні модифікації такого типу, як описано в попередньому абзаці, часто приводять до коду, який важко зрозуміти. Загалом заведено уникати такого запису (окрім особливих випадків).++Метод `forEach()` виконує функцію `callbackFn` один раз для кожного елементу в масиві, і на відміну від {{jsxref("Array.prototype.map()", "map()")}} чи+{{jsxref("Array.prototype.reduce()", "reduce()")}} він завжди повертає значення {{jsxref("undefined")}}, і не придатний до послідовних викликів. Зазвичай його використовують для виконання побічних ефектів наприкінці послідовності.++Метод `forEach()` не змінює масив, на якому він викликається. (Хоча,+`callbackFn` може це робити)++> **Зауваження:** Не існує способу зупинити або перервати цикл `forEach()` окрім +> як шляхом викидання винятку. Якщо вам потрібна можливість перервати цикл, метод `forEach()`+> для цього не підходить.+>+> Зупинка циклу до його завершення може бути досягнена шляхом використання:+>+> - Простого циклу [for](/en-US/docs/Web/JavaScript/Reference/Statements/for)+> - Циклів [for...of](/en-US/docs/Web/JavaScript/Reference/Statements/for...of)+>   або [for...in](/en-US/docs/Web/JavaScript/Reference/Statements/for...in)+> - {{jsxref("Array.prototype.every()")}}+> - {{jsxref("Array.prototype.some()")}}+> - {{jsxref("Array.prototype.find()")}}+> - {{jsxref("Array.prototype.findIndex()")}}+>+> Методи масиву, як от {{jsxref("Array.prototype.every()", "every()")}},+> {{jsxref("Array.prototype.some()", "some()")}}, {{jsxref("Array.prototype.find()", "find()")}}, і {{jsxref("Array.prototype.findIndex()", "findIndex()")}} перевіряють+> елементи масиву за допомогою предикату, що повертає істинне значення, якщо +> продовження перебирання масиву є необхідним.++> **Зауваження:** `forEach` приймає синхронну функцію.+>+> `forEach` не чекає на завершення промісів. Впевніться, що ви розумієте можливі наслідки під час+> використання промісів (чи асинхронних функцій) як аргументів для `forEach`.+>+> ```js+> let ratings = [5, 4, 5];+> let sum = 0;+>+> let sumFunction = async function (a, b)+> {+>   return a + b+> }+>+> ratings.forEach(async function(rating) {+>   sum = await sumFunction(sum, rating)+> })+>+> console.log(sum)+> // Наївно очікуваний результат: 14+> // Фактичний результат: 0+> ```++## Поліфіл++Метод `forEach()` було додано до стандарту ECMA-262 у його 5-й редакції. Тобто, він може бути доступний не у всіх його реалізаціях. Цю проблему можна обійти шляхом додавання наступного коду на початку скрипту. Фактично це дозволить використовувати `forEach()` у реалізаціях ECMA-262, які не підтримують його нативно.++Це той самий алгоритм, який наведено у 5-й редакції ECMA-262, з поправкою на припущення, що {{jsxref("Object")}} і {{jsxref("TypeError")}} мають свої початкові значення, і що `fun.call` зводиться до початкового значення {{jsxref("Function.prototype.call()")}}.++```js+// Етапи створення ECMA-262, 5 редакція, 15.4.4.18+// Посилання: https://es5.github.io/#x15.4.4.18++if (!Array.prototype['forEach']) {++  Array.prototype.forEach = function(callback, thisArg) {++    if (this == null) { throw new TypeError('Array.prototype.forEach called on null or undefined'); }++    var T, k;+    // 1. Нехай O є результатом викликання функції toObject(), що передає+    // значення |this| як аргумент.+    var O = Object(this);++    // 2. Нехай lenValue є результатом викликання внутрішнього методу Get()+    // об'єкту O з аргументом "length".+    // 3. Нехай len буде значенням toUint32(lenValue).+    var len = O.length >>> 0;++    // 4. Якщо isCallable(callback) є хибою, викинемо виняток TypeError.+    // Дивіться: https://es5.github.com/#x9.11+    if (typeof callback !== "function") { throw new TypeError(callback + ' is not a function'); }++    // 5. Якщо дано аргумент thisArg, нехай T буде thisArg;+    // інакше нехай T буде невизначено.+    if (arguments.length > 1) { T = thisArg; }++    // 6. Нехай k буде 0+    k = 0;++    // 7. Повторюємо, доки k < len+    while (k < len) {++      var kValue;++      // a. Нехай Pk буде ToString(k).+      //    Таке перетворення відбувається неявно для лівих операндів оператора "in"+      // b. Нехай kPresent буде результатом викликання внутрішнього+      //    методу HasProperty об'єкту O з аргументом Pk.+      //    Допускається суміщати цей крок із c+      // c. Якщо kPresent є істиною, тоді+      if (k in O) {++        // i. Нехай kValue буде результатом викликання внутрішнього методу Get+        // об'єкта O з аргументом Pk.+        kValue = O[k];++        // ii. Викличемо внутрішній метод Call функції зворотного виклику+        // з T як значенням "this", і набором аргументів, що містять kValue, k, and O.+        callback.call(T, kValue, k, O);+      }+      // d. Збільшуємо k на 1.+      k++;+    }+    // 8. Повертаємо undefined+  };+}+```++## Приклади++### Нічого не відбувається на неініціалізованих значеннях (розріджені масиви)++```js+const arraySparse = [1,3,,7]+let numCallbackRuns = 0++arraySparse.forEach(function(element) {+  console.log(element)+  numCallbackRuns+++})++console.log("numCallbackRuns: ", numCallbackRuns)++// 1+// 3+// 7+// numCallbackRuns: 3+// коментар: як можна побачити, пропущене значення між 3 та 7 не викликало функції зворотного виклику+```++### Перетворення циклу for на forEach++```js+const items = ['item1', 'item2', 'item3']+const copyItems = []++// до+for (let i = 0; i < items.length; i++) {+  copyItems.push(items[i])+}++// після+items.forEach(function(item){+  copyItems.push(item)+})+```++### Друк вмісту масиву++> **Зауваження:** Щоб показати вміст масиву у консолі,+> можна застосувати метод {{domxref("console/table", "console.table()")}}, який друкує+> відформатований варіант масиву.+>+> Приклад далі ілюструє альтернативний підхід, із застосуванням+> `forEach()`.++Наступний код друкує рядок для кожного елементу в масиві:++```js+function logArrayElements(element, index, array) {+  console.log('a[' + index + '] = ' + element)+}++// Зауважте, що порядковий номер 2 пропущено, оскільки в масиві не існує+// елементу на цій позиції...+[2, 5, , 9].forEach(logArrayElements)+// logs:+// a[0] = 2+// a[1] = 5+// a[3] = 9+```++### Застосування thisArg++Наступний (надуманий) приклад оновлює властивості об'єкту, з урахуванням поданих елементів масиву:++```js+function Counter() {+  this.sum = 0+  this.count = 0+}+Counter.prototype.add = function(array) {+  array.forEach(function countEntry(entry) {+    this.sum += entry+    ++this.count+  }, this)+}++const obj = new Counter()+obj.add([2, 5, 9])+obj.count+// 3+obj.sum+// 16+```++Оскільки параметр `thisArg` (`this`) було задано в `forEach()`, він передавався до функції `callback` кожного разу, коли вона викликалась. Сама функція зворотного виклику використовує її як значення `this`.++> **Зауваження:** Якщо при передачі функції зворотного виклику було використано вираз+> [стрілкової функції](/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions), значення параметру `thisArg` можна опустити,+> оскільки всі стрілкові функції прив'язують значення {{jsxref("Operators/this", "this")}}+> лексично.++### Функція копіювання об'єкту++Наступний код створює копію поданого об'єкту.++Існує декілька різних способів створити копію об'єкту. Спосіб, що наведено нижче - це лише один із багатьох, наведений для ілюстрації того, як `Array.prototype.forEach()` працює шляхом використання методів `Object.*` для роботи з властивостями, що з'явились у ECMAScript 5.++```js+function copy(obj) {+  const copy = Object.create(Object.getPrototypeOf(obj))+  const propNames = Object.getOwnPropertyNames(obj)++  propNames.forEach(function(name) {+    const desc = Object.getOwnPropertyDescriptor(obj, name)+    Object.defineProperty(copy, name, desc)+  })++  return copy+}++const obj1 = { a: 1, b: 2 }+const obj2 = copy(obj1) // obj2 тепер виглядає точнісінько як obj1+```++### Зміна масиву під час перебирання його елементів++Наступний приклад друкує `one`, `two`, `four`.++Коли в процесі передирання елементів функція підходить до значення `two`, перший елемент цілого масиву витісняється з нього. В результаті всі елементи, що залишилися, зміщуються на одну позицію вліво. Оскільки елемент `four` тепер займає лівішу позицію, елемент `three` пропускається.++Метод `forEach()` не робить копію масиву перед перебиранням.++```js+let words = ['one', 'two', 'three', 'four']+words.forEach(function(word) {+  console.log(word)+  if (word === 'two') {+    words.shift() // елемент 'one' видаляється з масиву+  }+}) // one // two // four++console.log(words);  //['two', 'three', 'four']+```++### Сплющення масиву

вирівнювання (на один рівень) або спрощення масиву. Чи сплющення це з підручника?

AdriandeCita

comment created time in 17 days

Pull request review commentwebdoky/content

translate web-js-ref-global_objects-array-foreach page

+---+title: Array.prototype.forEach()+slug: Web/JavaScript/Reference/Global_Objects/Array/forEach+tags:+  - Array+  - ECMAScript 5+  - JavaScript+  - Method+  - Prototype+  - Reference+  - Polyfill+browser-compat: javascript.builtins.Array.forEach+---+{{JSRef}}++Метод **`forEach()`** виконує дану функцію один раз для кожного елементу масиву.++{{EmbedInteractiveExample("pages/js/array-foreach.html")}}++## Синтаксис++```js+// Стрілкова функція+forEach((element) => { ... } )+forEach((element, index) => { ... } )+forEach((element, index, array) => { ... } )++// Функція зворотного виклику+forEach(callbackFn)+forEach(callbackFn, thisArg)++// Функція зворотного виклику, оголошена на місці+forEach(function callbackFn(element) { ... })+forEach(function callbackFn(element, index) { ... })+forEach(function callbackFn(element, index, array){ ... })+forEach(function callbackFn(element, index, array) { ... }, thisArg)+```++### Параметри++- `callbackFn`++  - : Функція, яку буде викликано на кожному елементі. Приймає від одного до трьох аргументів:++    - `element`+      - : Поточний елемент масиву, який зараз опрацьовується.+    - `index` {{optional_inline}}+      - : Порядковий номер цього елементу в масиві.+    - `array` {{optional_inline}}+      - : Власне масив, на якому було викликано `forEach()`.++- `thisArg` {{optional_inline}}+  - : Значення, яке буде підставлено як `this` під час виконання `callbackFn`.++### Результат++`undefined`.++## Опис++Метод `forEach()` викликає подану функцію `callbackFn` один раз для кожного елементу в масиві, у порядку зростання їх порядкового номера. Функція не викликається для елементів, які було видалено, або які не було ініціалізовано. (для розріджених масивів [дивіться приклад нижче](#sparsearray).)++Функція `callbackFn` викликається з трьома аргументами:++1.  значення елементу+2.  порядковий номер елементу+3.  об'єкт масиву, який наразі опрацьовується++Якщо у `forEach()` задано параметр `thisArg`, його буде використано як значення `this` у функції зворотного виклику. В загальному випадку значення `this`, яке бачитиме функція `callback` визначається згідно з [загальними правилами визначення значення `this`, доступного для функції](/en-US/docs/Web/JavaScript/Reference/Operators/this).++Діапазон елементів, що опрацьовуються функцією `forEach()`, задається до першого виклику `callbackFn`. Елементи, які будуть присвоєні до індексів, що вже пройдені методом, або ж до індексів за межами цього діапазону, не будуть опрацьовані функцією `callbackFn`. Якщо наявні елементи змінюються чи видаляються, то до `callbackFn` буде передано їх фактичне значення на момент, коли функція `forEach()` їх опрацьовує. Ті елементи, які були видалені до того, як їх опрацювала функція, опрацьовані не будуть. Якщо елементи, які уже були опрацьовані, видаляються (наприклад, за допомогою {{jsxref("Array.prototype.shift()", "shift()")}}) під час проходження по масиву, наступні елементи буде пропущено. ([Дивіться цей приклад нижче](#modifying_the_array_during_iteration).)++**Обережно:** Одночасні модифікації такого типу, як описано в попередньому абзаці, часто приводять до коду, який важко зрозуміти. Загалом заведено уникати такого запису (окрім особливих випадків).++Метод `forEach()` виконує функцію `callbackFn` один раз для кожного елементу в масиві, і на відміну від {{jsxref("Array.prototype.map()", "map()")}} чи+{{jsxref("Array.prototype.reduce()", "reduce()")}} він завжди повертає значення {{jsxref("undefined")}}, і не придатний до послідовних викликів. Зазвичай його використовують для виконання побічних ефектів наприкінці послідовності.++Метод `forEach()` не змінює масив, на якому він викликається. (Хоча,+`callbackFn` може це робити)++> **Зауваження:** Не існує способу зупинити або перервати цикл `forEach()` окрім +> як шляхом викидання винятку. Якщо вам потрібна можливість перервати цикл, метод `forEach()`+> для цього не підходить.+>+> Зупинка циклу до його завершення може бути досягнена шляхом використання:+>+> - Простого циклу [for](/en-US/docs/Web/JavaScript/Reference/Statements/for)+> - Циклів [for...of](/en-US/docs/Web/JavaScript/Reference/Statements/for...of)+>   або [for...in](/en-US/docs/Web/JavaScript/Reference/Statements/for...in)+> - {{jsxref("Array.prototype.every()")}}+> - {{jsxref("Array.prototype.some()")}}+> - {{jsxref("Array.prototype.find()")}}+> - {{jsxref("Array.prototype.findIndex()")}}+>+> Методи масиву, як от {{jsxref("Array.prototype.every()", "every()")}},+> {{jsxref("Array.prototype.some()", "some()")}}, {{jsxref("Array.prototype.find()", "find()")}}, і {{jsxref("Array.prototype.findIndex()", "findIndex()")}} перевіряють+> елементи масиву за допомогою предикату, що повертає істинне значення, якщо +> продовження перебирання масиву є необхідним.++> **Зауваження:** `forEach` приймає синхронну функцію.+>+> `forEach` не чекає на завершення промісів. Впевніться, що ви розумієте можливі наслідки під час+> використання промісів (чи асинхронних функцій) як аргументів для `forEach`.+>+> ```js+> let ratings = [5, 4, 5];+> let sum = 0;+>+> let sumFunction = async function (a, b)+> {+>   return a + b+> }+>+> ratings.forEach(async function(rating) {+>   sum = await sumFunction(sum, rating)+> })+>+> console.log(sum)+> // Наївно очікуваний результат: 14+> // Фактичний результат: 0+> ```++## Поліфіл++Метод `forEach()` було додано до стандарту ECMA-262 у його 5-й редакції. Тобто, він може бути доступний не у всіх його реалізаціях. Цю проблему можна обійти шляхом додавання наступного коду на початку скрипту. Фактично це дозволить використовувати `forEach()` у реалізаціях ECMA-262, які не підтримують його нативно.++Це той самий алгоритм, який наведено у 5-й редакції ECMA-262, з поправкою на припущення, що {{jsxref("Object")}} і {{jsxref("TypeError")}} мають свої початкові значення, і що `fun.call` зводиться до початкового значення {{jsxref("Function.prototype.call()")}}.++```js+// Етапи створення ECMA-262, 5 редакція, 15.4.4.18+// Посилання: https://es5.github.io/#x15.4.4.18++if (!Array.prototype['forEach']) {++  Array.prototype.forEach = function(callback, thisArg) {++    if (this == null) { throw new TypeError('Array.prototype.forEach called on null or undefined'); }++    var T, k;+    // 1. Нехай O є результатом викликання функції toObject(), що передає+    // значення |this| як аргумент.+    var O = Object(this);++    // 2. Нехай lenValue є результатом викликання внутрішнього методу Get()+    // об'єкту O з аргументом "length".+    // 3. Нехай len буде значенням toUint32(lenValue).+    var len = O.length >>> 0;++    // 4. Якщо isCallable(callback) є хибою, викинемо виняток TypeError.+    // Дивіться: https://es5.github.com/#x9.11+    if (typeof callback !== "function") { throw new TypeError(callback + ' is not a function'); }++    // 5. Якщо дано аргумент thisArg, нехай T буде thisArg;+    // інакше нехай T буде невизначено.+    if (arguments.length > 1) { T = thisArg; }++    // 6. Нехай k буде 0+    k = 0;++    // 7. Повторюємо, доки k < len+    while (k < len) {++      var kValue;++      // a. Нехай Pk буде ToString(k).+      //    Таке перетворення відбувається неявно для лівих операндів оператора "in"+      // b. Нехай kPresent буде результатом викликання внутрішнього+      //    методу HasProperty об'єкту O з аргументом Pk.+      //    Допускається суміщати цей крок із c+      // c. Якщо kPresent є істиною, тоді+      if (k in O) {++        // i. Нехай kValue буде результатом викликання внутрішнього методу Get+        // об'єкта O з аргументом Pk.+        kValue = O[k];++        // ii. Викличемо внутрішній метод Call функції зворотного виклику+        // з T як значенням "this", і набором аргументів, що містять kValue, k, and O.+        callback.call(T, kValue, k, O);+      }+      // d. Збільшуємо k на 1.+      k++;+    }+    // 8. Повертаємо undefined+  };+}+```++## Приклади++### Нічого не відбувається на неініціалізованих значеннях (розріджені масиви)++```js+const arraySparse = [1,3,,7]+let numCallbackRuns = 0++arraySparse.forEach(function(element) {+  console.log(element)+  numCallbackRuns+++})++console.log("numCallbackRuns: ", numCallbackRuns)++// 1+// 3+// 7+// numCallbackRuns: 3+// коментар: як можна побачити, пропущене значення між 3 та 7 не викликало функції зворотного виклику+```++### Перетворення циклу for на forEach++```js+const items = ['item1', 'item2', 'item3']+const copyItems = []++// до+for (let i = 0; i < items.length; i++) {+  copyItems.push(items[i])+}++// після+items.forEach(function(item){+  copyItems.push(item)+})+```++### Друк вмісту масиву++> **Зауваження:** Щоб показати вміст масиву у консолі,+> можна застосувати метод {{domxref("console/table", "console.table()")}}, який друкує+> відформатований варіант масиву.+>+> Приклад далі ілюструє альтернативний підхід, із застосуванням+> `forEach()`.++Наступний код друкує рядок для кожного елементу в масиві:++```js+function logArrayElements(element, index, array) {+  console.log('a[' + index + '] = ' + element)+}++// Зауважте, що порядковий номер 2 пропущено, оскільки в масиві не існує+// елементу на цій позиції...+[2, 5, , 9].forEach(logArrayElements)+// logs:+// a[0] = 2+// a[1] = 5+// a[3] = 9+```++### Застосування thisArg++Наступний (надуманий) приклад оновлює властивості об'єкту, з урахуванням поданих елементів масиву:++```js+function Counter() {+  this.sum = 0+  this.count = 0+}+Counter.prototype.add = function(array) {+  array.forEach(function countEntry(entry) {+    this.sum += entry+    ++this.count+  }, this)+}++const obj = new Counter()+obj.add([2, 5, 9])+obj.count+// 3+obj.sum+// 16+```++Оскільки параметр `thisArg` (`this`) було задано в `forEach()`, він передавався до функції `callback` кожного разу, коли вона викликалась. Сама функція зворотного виклику використовує її як значення `this`.++> **Зауваження:** Якщо при передачі функції зворотного виклику було використано вираз+> [стрілкової функції](/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions), значення параметру `thisArg` можна опустити,+> оскільки всі стрілкові функції прив'язують значення {{jsxref("Operators/this", "this")}}+> лексично.++### Функція копіювання об'єкту++Наступний код створює копію поданого об'єкту.++Існує декілька різних способів створити копію об'єкту. Спосіб, що наведено нижче - це лише один із багатьох, наведений для ілюстрації того, як `Array.prototype.forEach()` працює шляхом використання методів `Object.*` для роботи з властивостями, що з'явились у ECMAScript 5.++```js+function copy(obj) {+  const copy = Object.create(Object.getPrototypeOf(obj))+  const propNames = Object.getOwnPropertyNames(obj)++  propNames.forEach(function(name) {+    const desc = Object.getOwnPropertyDescriptor(obj, name)+    Object.defineProperty(copy, name, desc)+  })++  return copy+}++const obj1 = { a: 1, b: 2 }+const obj2 = copy(obj1) // obj2 тепер виглядає точнісінько як obj1+```++### Зміна масиву під час перебирання його елементів++Наступний приклад друкує `one`, `two`, `four`.++Коли в процесі передирання елементів функція підходить до значення `two`, перший елемент цілого масиву витісняється з нього. В результаті всі елементи, що залишилися, зміщуються на одну позицію вліво. Оскільки елемент `four` тепер займає лівішу позицію, елемент `three` пропускається.++Метод `forEach()` не робить копію масиву перед перебиранням.++```js+let words = ['one', 'two', 'three', 'four']+words.forEach(function(word) {+  console.log(word)+  if (word === 'two') {+    words.shift() // елемент 'one' видаляється з масиву+  }+}) // one // two // four++console.log(words);  //['two', 'three', 'four']+```++### Сплющення масиву++Приклад нижче наведено лише для навчальних потреб. Для сплющення масивів вбудованими методами можна застосовувати {{jsxref("Array.prototype.flat()")}}.

сплющення

AdriandeCita

comment created time in 17 days

PullRequestReviewEvent

Pull request review commentwebdoky/content

translate web-js-ref-global_objects-array-foreach page

+---+title: Array.prototype.forEach()+slug: Web/JavaScript/Reference/Global_Objects/Array/forEach+tags:+  - Array+  - ECMAScript 5+  - JavaScript+  - Method+  - Prototype+  - Reference+  - Polyfill+browser-compat: javascript.builtins.Array.forEach+---+{{JSRef}}++Метод **`forEach()`** виконує дану функцію один раз для кожного елементу масиву.++{{EmbedInteractiveExample("pages/js/array-foreach.html")}}++## Синтаксис++```js+// Стрілкова функція+forEach((element) => { ... } )+forEach((element, index) => { ... } )+forEach((element, index, array) => { ... } )++// Функція зворотного виклику+forEach(callbackFn)+forEach(callbackFn, thisArg)++// Функція зворотного виклику, оголошена на місці+forEach(function callbackFn(element) { ... })+forEach(function callbackFn(element, index) { ... })+forEach(function callbackFn(element, index, array){ ... })+forEach(function callbackFn(element, index, array) { ... }, thisArg)+```++### Параметри++- `callbackFn`++  - : Функція, яку буде викликано на кожному елементі. Приймає від одного до трьох аргументів:++    - `element`+      - : Поточний елемент масиву, який зараз опрацьовується.+    - `index` {{optional_inline}}+      - : Порядковий номер цього елементу в масиві.+    - `array` {{optional_inline}}+      - : Власне масив, на якому було викликано `forEach()`.++- `thisArg` {{optional_inline}}+  - : Значення, яке буде підставлено як `this` під час виконання `callbackFn`.++### Результат++`undefined`.++## Опис++Метод `forEach()` викликає подану функцію `callbackFn` один раз для кожного елементу в масиві, у порядку зростання їх порядкового номера. Функція не викликається для елементів, які було видалено, або які не було ініціалізовано. (для розріджених масивів [дивіться приклад нижче](#sparsearray).)++Функція `callbackFn` викликається з трьома аргументами:++1.  значення елементу+2.  порядковий номер елементу+3.  об'єкт масиву, який наразі опрацьовується++Якщо у `forEach()` задано параметр `thisArg`, його буде використано як значення `this` у функції зворотного виклику. В загальному випадку значення `this`, яке бачитиме функція `callback` визначається згідно з [загальними правилами визначення значення `this`, доступного для функції](/en-US/docs/Web/JavaScript/Reference/Operators/this).++Діапазон елементів, що опрацьовуються функцією `forEach()`, задається до першого виклику `callbackFn`. Елементи, які будуть присвоєні до індексів, що вже пройдені методом, або ж до індексів за межами цього діапазону, не будуть опрацьовані функцією `callbackFn`. Якщо наявні елементи змінюються чи видаляються, то до `callbackFn` буде передано їх фактичне значення на момент, коли функція `forEach()` їх опрацьовує. Ті елементи, які були видалені до того, як їх опрацювала функція, опрацьовані не будуть. Якщо елементи, які уже були опрацьовані, видаляються (наприклад, за допомогою {{jsxref("Array.prototype.shift()", "shift()")}}) під час проходження по масиву, наступні елементи буде пропущено. ([Дивіться цей приклад нижче](#modifying_the_array_during_iteration).)++**Обережно:** Одночасні модифікації такого типу, як описано в попередньому абзаці, часто приводять до коду, який важко зрозуміти. Загалом заведено уникати такого запису (окрім особливих випадків).++Метод `forEach()` виконує функцію `callbackFn` один раз для кожного елементу в масиві, і на відміну від {{jsxref("Array.prototype.map()", "map()")}} чи+{{jsxref("Array.prototype.reduce()", "reduce()")}} він завжди повертає значення {{jsxref("undefined")}}, і не придатний до послідовних викликів. Зазвичай його використовують для виконання побічних ефектів наприкінці послідовності.++Метод `forEach()` не змінює масив, на якому він викликається. (Хоча,+`callbackFn` може це робити)++> **Зауваження:** Не існує способу зупинити або перервати цикл `forEach()` окрім +> як шляхом викидання винятку. Якщо вам потрібна можливість перервати цикл, метод `forEach()`+> для цього не підходить.+>+> Зупинка циклу до його завершення може бути досягнена шляхом використання:+>+> - Простого циклу [for](/en-US/docs/Web/JavaScript/Reference/Statements/for)+> - Циклів [for...of](/en-US/docs/Web/JavaScript/Reference/Statements/for...of)+>   або [for...in](/en-US/docs/Web/JavaScript/Reference/Statements/for...in)+> - {{jsxref("Array.prototype.every()")}}+> - {{jsxref("Array.prototype.some()")}}+> - {{jsxref("Array.prototype.find()")}}+> - {{jsxref("Array.prototype.findIndex()")}}+>+> Методи масиву, як от {{jsxref("Array.prototype.every()", "every()")}},+> {{jsxref("Array.prototype.some()", "some()")}}, {{jsxref("Array.prototype.find()", "find()")}}, і {{jsxref("Array.prototype.findIndex()", "findIndex()")}} перевіряють+> елементи масиву за допомогою предикату, що повертає істинне значення, якщо +> продовження перебирання масиву є необхідним.++> **Зауваження:** `forEach` приймає синхронну функцію.+>+> `forEach` не чекає на завершення промісів. Впевніться, що ви розумієте можливі наслідки під час+> використання промісів (чи асинхронних функцій) як аргументів для `forEach`.+>+> ```js+> let ratings = [5, 4, 5];+> let sum = 0;+>+> let sumFunction = async function (a, b)+> {+>   return a + b+> }+>+> ratings.forEach(async function(rating) {+>   sum = await sumFunction(sum, rating)+> })+>+> console.log(sum)+> // Наївно очікуваний результат: 14+> // Фактичний результат: 0+> ```++## Поліфіл++Метод `forEach()` було додано до стандарту ECMA-262 у його 5-й редакції. Тобто, він може бути доступний не у всіх його реалізаціях. Цю проблему можна обійти шляхом додавання наступного коду на початку скрипту. Фактично це дозволить використовувати `forEach()` у реалізаціях ECMA-262, які не підтримують його нативно.++Це той самий алгоритм, який наведено у 5-й редакції ECMA-262, з поправкою на припущення, що {{jsxref("Object")}} і {{jsxref("TypeError")}} мають свої початкові значення, і що `fun.call` зводиться до початкового значення {{jsxref("Function.prototype.call()")}}.++```js+// Етапи створення ECMA-262, 5 редакція, 15.4.4.18+// Посилання: https://es5.github.io/#x15.4.4.18++if (!Array.prototype['forEach']) {++  Array.prototype.forEach = function(callback, thisArg) {++    if (this == null) { throw new TypeError('Array.prototype.forEach called on null or undefined'); }++    var T, k;+    // 1. Нехай O є результатом викликання функції toObject(), що передає+    // значення |this| як аргумент.+    var O = Object(this);++    // 2. Нехай lenValue є результатом викликання внутрішнього методу Get()+    // об'єкту O з аргументом "length".+    // 3. Нехай len буде значенням toUint32(lenValue).+    var len = O.length >>> 0;++    // 4. Якщо isCallable(callback) є хибою, викинемо виняток TypeError.+    // Дивіться: https://es5.github.com/#x9.11+    if (typeof callback !== "function") { throw new TypeError(callback + ' is not a function'); }++    // 5. Якщо дано аргумент thisArg, нехай T буде thisArg;+    // інакше нехай T буде невизначено.+    if (arguments.length > 1) { T = thisArg; }++    // 6. Нехай k буде 0+    k = 0;++    // 7. Повторюємо, доки k < len+    while (k < len) {++      var kValue;++      // a. Нехай Pk буде ToString(k).+      //    Таке перетворення відбувається неявно для лівих операндів оператора "in"+      // b. Нехай kPresent буде результатом викликання внутрішнього+      //    методу HasProperty об'єкту O з аргументом Pk.+      //    Допускається суміщати цей крок із c+      // c. Якщо kPresent є істиною, тоді+      if (k in O) {++        // i. Нехай kValue буде результатом викликання внутрішнього методу Get+        // об'єкта O з аргументом Pk.+        kValue = O[k];++        // ii. Викличемо внутрішній метод Call функції зворотного виклику+        // з T як значенням "this", і набором аргументів, що містять kValue, k, and O.+        callback.call(T, kValue, k, O);+      }+      // d. Збільшуємо k на 1.+      k++;+    }+    // 8. Повертаємо undefined+  };+}+```++## Приклади++### Нічого не відбувається на неініціалізованих значеннях (розріджені масиви)++```js+const arraySparse = [1,3,,7]+let numCallbackRuns = 0++arraySparse.forEach(function(element) {+  console.log(element)+  numCallbackRuns+++})++console.log("numCallbackRuns: ", numCallbackRuns)++// 1+// 3+// 7+// numCallbackRuns: 3+// коментар: як можна побачити, пропущене значення між 3 та 7 не викликало функції зворотного виклику+```++### Перетворення циклу for на forEach++```js+const items = ['item1', 'item2', 'item3']+const copyItems = []++// до+for (let i = 0; i < items.length; i++) {+  copyItems.push(items[i])+}++// після+items.forEach(function(item){+  copyItems.push(item)+})+```++### Друк вмісту масиву++> **Зауваження:** Щоб показати вміст масиву у консолі,+> можна застосувати метод {{domxref("console/table", "console.table()")}}, який друкує+> відформатований варіант масиву.+>+> Приклад далі ілюструє альтернативний підхід, із застосуванням+> `forEach()`.++Наступний код друкує рядок для кожного елементу в масиві:++```js+function logArrayElements(element, index, array) {+  console.log('a[' + index + '] = ' + element)+}++// Зауважте, що порядковий номер 2 пропущено, оскільки в масиві не існує+// елементу на цій позиції...+[2, 5, , 9].forEach(logArrayElements)+// logs:+// a[0] = 2+// a[1] = 5+// a[3] = 9+```++### Застосування thisArg++Наступний (надуманий) приклад оновлює властивості об'єкту, з урахуванням поданих елементів масиву:++```js+function Counter() {+  this.sum = 0+  this.count = 0+}+Counter.prototype.add = function(array) {+  array.forEach(function countEntry(entry) {+    this.sum += entry+    ++this.count+  }, this)+}++const obj = new Counter()+obj.add([2, 5, 9])+obj.count+// 3+obj.sum+// 16+```++Оскільки параметр `thisArg` (`this`) було задано в `forEach()`, він передавався до функції `callback` кожного разу, коли вона викликалась. Сама функція зворотного виклику використовує її як значення `this`.++> **Зауваження:** Якщо при передачі функції зворотного виклику було використано вираз+> [стрілкової функції](/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions), значення параметру `thisArg` можна опустити,+> оскільки всі стрілкові функції прив'язують значення {{jsxref("Operators/this", "this")}}+> лексично.++### Функція копіювання об'єкту++Наступний код створює копію поданого об'єкту.++Існує декілька різних способів створити копію об'єкту. Спосіб, що наведено нижче - це лише один із багатьох, наведений для ілюстрації того, як `Array.prototype.forEach()` працює шляхом використання методів `Object.*` для роботи з властивостями, що з'явились у ECMAScript 5.++```js+function copy(obj) {+  const copy = Object.create(Object.getPrototypeOf(obj))+  const propNames = Object.getOwnPropertyNames(obj)++  propNames.forEach(function(name) {+    const desc = Object.getOwnPropertyDescriptor(obj, name)+    Object.defineProperty(copy, name, desc)+  })++  return copy+}++const obj1 = { a: 1, b: 2 }+const obj2 = copy(obj1) // obj2 тепер виглядає точнісінько як obj1+```++### Зміна масиву під час перебирання його елементів++Наступний приклад друкує `one`, `two`, `four`.++Коли в процесі передирання елементів функція підходить до значення `two`, перший елемент цілого масиву витісняється з нього. В результаті всі елементи, що залишилися, зміщуються на одну позицію вліво. Оскільки елемент `four` тепер займає лівішу позицію, елемент `three` пропускається.

передирання —» перебирання

AdriandeCita

comment created time in 17 days

Pull request review commentwebdoky/content

translate web-js-ref-global_objects-array-foreach page

+---+title: Array.prototype.forEach()+slug: Web/JavaScript/Reference/Global_Objects/Array/forEach+tags:+  - Array+  - ECMAScript 5+  - JavaScript+  - Method+  - Prototype+  - Reference+  - Polyfill+browser-compat: javascript.builtins.Array.forEach+---+{{JSRef}}++Метод **`forEach()`** виконує дану функцію один раз для кожного елементу масиву.++{{EmbedInteractiveExample("pages/js/array-foreach.html")}}++## Синтаксис++```js+// Стрілкова функція+forEach((element) => { ... } )+forEach((element, index) => { ... } )+forEach((element, index, array) => { ... } )++// Функція зворотного виклику+forEach(callbackFn)+forEach(callbackFn, thisArg)++// Функція зворотного виклику, оголошена на місці+forEach(function callbackFn(element) { ... })+forEach(function callbackFn(element, index) { ... })+forEach(function callbackFn(element, index, array){ ... })+forEach(function callbackFn(element, index, array) { ... }, thisArg)+```++### Параметри++- `callbackFn`++  - : Функція, яку буде викликано на кожному елементі. Приймає від одного до трьох аргументів:++    - `element`+      - : Поточний елемент масиву, який зараз опрацьовується.+    - `index` {{optional_inline}}+      - : Порядковий номер цього елементу в масиві.+    - `array` {{optional_inline}}+      - : Власне масив, на якому було викликано `forEach()`.++- `thisArg` {{optional_inline}}+  - : Значення, яке буде підставлено як `this` під час виконання `callbackFn`.++### Результат++`undefined`.++## Опис++Метод `forEach()` викликає подану функцію `callbackFn` один раз для кожного елементу в масиві, у порядку зростання їх порядкового номера. Функція не викликається для елементів, які було видалено, або які не було ініціалізовано. (для розріджених масивів [дивіться приклад нижче](#sparsearray).)++Функція `callbackFn` викликається з трьома аргументами:++1.  значення елементу+2.  порядковий номер елементу+3.  об'єкт масиву, який наразі опрацьовується++Якщо у `forEach()` задано параметр `thisArg`, його буде використано як значення `this` у функції зворотного виклику. В загальному випадку значення `this`, яке бачитиме функція `callback` визначається згідно з [загальними правилами визначення значення `this`, доступного для функції](/en-US/docs/Web/JavaScript/Reference/Operators/this).++Діапазон елементів, що опрацьовуються функцією `forEach()`, задається до першого виклику `callbackFn`. Елементи, які будуть присвоєні до індексів, що вже пройдені методом, або ж до індексів за межами цього діапазону, не будуть опрацьовані функцією `callbackFn`. Якщо наявні елементи змінюються чи видаляються, то до `callbackFn` буде передано їх фактичне значення на момент, коли функція `forEach()` їх опрацьовує. Ті елементи, які були видалені до того, як їх опрацювала функція, опрацьовані не будуть. Якщо елементи, які уже були опрацьовані, видаляються (наприклад, за допомогою {{jsxref("Array.prototype.shift()", "shift()")}}) під час проходження по масиву, наступні елементи буде пропущено. ([Дивіться цей приклад нижче](#modifying_the_array_during_iteration).)++**Обережно:** Одночасні модифікації такого типу, як описано в попередньому абзаці, часто приводять до коду, який важко зрозуміти. Загалом заведено уникати такого запису (окрім особливих випадків).++Метод `forEach()` виконує функцію `callbackFn` один раз для кожного елементу в масиві, і на відміну від {{jsxref("Array.prototype.map()", "map()")}} чи+{{jsxref("Array.prototype.reduce()", "reduce()")}} він завжди повертає значення {{jsxref("undefined")}}, і не придатний до послідовних викликів. Зазвичай його використовують для виконання побічних ефектів наприкінці послідовності.++Метод `forEach()` не змінює масив, на якому він викликається. (Хоча,+`callbackFn` може це робити)++> **Зауваження:** Не існує способу зупинити або перервати цикл `forEach()` окрім +> як шляхом викидання винятку. Якщо вам потрібна можливість перервати цикл, метод `forEach()`+> для цього не підходить.+>+> Зупинка циклу до його завершення може бути досягнена шляхом використання:+>+> - Простого циклу [for](/en-US/docs/Web/JavaScript/Reference/Statements/for)+> - Циклів [for...of](/en-US/docs/Web/JavaScript/Reference/Statements/for...of)+>   або [for...in](/en-US/docs/Web/JavaScript/Reference/Statements/for...in)+> - {{jsxref("Array.prototype.every()")}}+> - {{jsxref("Array.prototype.some()")}}+> - {{jsxref("Array.prototype.find()")}}+> - {{jsxref("Array.prototype.findIndex()")}}+>+> Методи масиву, як от {{jsxref("Array.prototype.every()", "every()")}},+> {{jsxref("Array.prototype.some()", "some()")}}, {{jsxref("Array.prototype.find()", "find()")}}, і {{jsxref("Array.prototype.findIndex()", "findIndex()")}} перевіряють+> елементи масиву за допомогою предикату, що повертає істинне значення, якщо +> продовження перебирання масиву є необхідним.++> **Зауваження:** `forEach` приймає синхронну функцію.+>+> `forEach` не чекає на завершення промісів. Впевніться, що ви розумієте можливі наслідки під час+> використання промісів (чи асинхронних функцій) як аргументів для `forEach`.+>+> ```js+> let ratings = [5, 4, 5];+> let sum = 0;+>+> let sumFunction = async function (a, b)+> {+>   return a + b+> }+>+> ratings.forEach(async function(rating) {+>   sum = await sumFunction(sum, rating)+> })+>+> console.log(sum)+> // Наївно очікуваний результат: 14+> // Фактичний результат: 0+> ```++## Поліфіл++Метод `forEach()` було додано до стандарту ECMA-262 у його 5-й редакції. Тобто, він може бути доступний не у всіх його реалізаціях. Цю проблему можна обійти шляхом додавання наступного коду на початку скрипту. Фактично це дозволить використовувати `forEach()` у реалізаціях ECMA-262, які не підтримують його нативно.++Це той самий алгоритм, який наведено у 5-й редакції ECMA-262, з поправкою на припущення, що {{jsxref("Object")}} і {{jsxref("TypeError")}} мають свої початкові значення, і що `fun.call` зводиться до початкового значення {{jsxref("Function.prototype.call()")}}.++```js+// Етапи створення ECMA-262, 5 редакція, 15.4.4.18+// Посилання: https://es5.github.io/#x15.4.4.18++if (!Array.prototype['forEach']) {++  Array.prototype.forEach = function(callback, thisArg) {++    if (this == null) { throw new TypeError('Array.prototype.forEach called on null or undefined'); }++    var T, k;+    // 1. Нехай O є результатом викликання функції toObject(), що передає+    // значення |this| як аргумент.+    var O = Object(this);++    // 2. Нехай lenValue є результатом викликання внутрішнього методу Get()+    // об'єкту O з аргументом "length".+    // 3. Нехай len буде значенням toUint32(lenValue).+    var len = O.length >>> 0;++    // 4. Якщо isCallable(callback) є хибою, викинемо виняток TypeError.

є хибою —» це false, не істинне значення, або свій варіант

AdriandeCita

comment created time in 17 days

Pull request review commentwebdoky/content

translate web-js-ref-global_objects-array-foreach page

+---+title: Array.prototype.forEach()+slug: Web/JavaScript/Reference/Global_Objects/Array/forEach+tags:+  - Array+  - ECMAScript 5+  - JavaScript+  - Method+  - Prototype+  - Reference+  - Polyfill+browser-compat: javascript.builtins.Array.forEach+---+{{JSRef}}++Метод **`forEach()`** виконує дану функцію один раз для кожного елементу масиву.++{{EmbedInteractiveExample("pages/js/array-foreach.html")}}++## Синтаксис++```js+// Стрілкова функція+forEach((element) => { ... } )+forEach((element, index) => { ... } )+forEach((element, index, array) => { ... } )++// Функція зворотного виклику+forEach(callbackFn)+forEach(callbackFn, thisArg)++// Функція зворотного виклику, оголошена на місці+forEach(function callbackFn(element) { ... })+forEach(function callbackFn(element, index) { ... })+forEach(function callbackFn(element, index, array){ ... })+forEach(function callbackFn(element, index, array) { ... }, thisArg)+```++### Параметри++- `callbackFn`++  - : Функція, яку буде викликано на кожному елементі. Приймає від одного до трьох аргументів:++    - `element`+      - : Поточний елемент масиву, який зараз опрацьовується.+    - `index` {{optional_inline}}+      - : Порядковий номер цього елементу в масиві.+    - `array` {{optional_inline}}+      - : Власне масив, на якому було викликано `forEach()`.++- `thisArg` {{optional_inline}}+  - : Значення, яке буде підставлено як `this` під час виконання `callbackFn`.++### Результат++`undefined`.++## Опис++Метод `forEach()` викликає подану функцію `callbackFn` один раз для кожного елементу в масиві, у порядку зростання їх порядкового номера. Функція не викликається для елементів, які було видалено, або які не було ініціалізовано. (для розріджених масивів [дивіться приклад нижче](#sparsearray).)++Функція `callbackFn` викликається з трьома аргументами:++1.  значення елементу+2.  порядковий номер елементу+3.  об'єкт масиву, який наразі опрацьовується++Якщо у `forEach()` задано параметр `thisArg`, його буде використано як значення `this` у функції зворотного виклику. В загальному випадку значення `this`, яке бачитиме функція `callback` визначається згідно з [загальними правилами визначення значення `this`, доступного для функції](/en-US/docs/Web/JavaScript/Reference/Operators/this).++Діапазон елементів, що опрацьовуються функцією `forEach()`, задається до першого виклику `callbackFn`. Елементи, які будуть присвоєні до індексів, що вже пройдені методом, або ж до індексів за межами цього діапазону, не будуть опрацьовані функцією `callbackFn`. Якщо наявні елементи змінюються чи видаляються, то до `callbackFn` буде передано їх фактичне значення на момент, коли функція `forEach()` їх опрацьовує. Ті елементи, які були видалені до того, як їх опрацювала функція, опрацьовані не будуть. Якщо елементи, які уже були опрацьовані, видаляються (наприклад, за допомогою {{jsxref("Array.prototype.shift()", "shift()")}}) під час проходження по масиву, наступні елементи буде пропущено. ([Дивіться цей приклад нижче](#modifying_the_array_during_iteration).)

присвоєні до індексів —» присвоєні індексам, пройдені методом —» перебрані методом

AdriandeCita

comment created time in 17 days

Pull request review commentwebdoky/content

translate web-js-ref-global_objects-array-foreach page

+---+title: Array.prototype.forEach()+slug: Web/JavaScript/Reference/Global_Objects/Array/forEach+tags:+  - Array+  - ECMAScript 5+  - JavaScript+  - Method+  - Prototype+  - Reference+  - Polyfill+browser-compat: javascript.builtins.Array.forEach+---+{{JSRef}}++Метод **`forEach()`** виконує дану функцію один раз для кожного елементу масиву.++{{EmbedInteractiveExample("pages/js/array-foreach.html")}}++## Синтаксис++```js+// Стрілкова функція+forEach((element) => { ... } )+forEach((element, index) => { ... } )+forEach((element, index, array) => { ... } )++// Функція зворотного виклику+forEach(callbackFn)+forEach(callbackFn, thisArg)++// Функція зворотного виклику, оголошена на місці+forEach(function callbackFn(element) { ... })+forEach(function callbackFn(element, index) { ... })+forEach(function callbackFn(element, index, array){ ... })+forEach(function callbackFn(element, index, array) { ... }, thisArg)+```++### Параметри++- `callbackFn`++  - : Функція, яку буде викликано на кожному елементі. Приймає від одного до трьох аргументів:++    - `element`+      - : Поточний елемент масиву, який зараз опрацьовується.+    - `index` {{optional_inline}}+      - : Порядковий номер цього елементу в масиві.+    - `array` {{optional_inline}}+      - : Власне масив, на якому було викликано `forEach()`.++- `thisArg` {{optional_inline}}+  - : Значення, яке буде підставлено як `this` під час виконання `callbackFn`.++### Результат++`undefined`.++## Опис++Метод `forEach()` викликає подану функцію `callbackFn` один раз для кожного елементу в масиві, у порядку зростання їх порядкового номера. Функція не викликається для елементів, які було видалено, або які не було ініціалізовано. (для розріджених масивів [дивіться приклад нижче](#sparsearray).)++Функція `callbackFn` викликається з трьома аргументами:++1.  значення елементу+2.  порядковий номер елементу+3.  об'єкт масиву, який наразі опрацьовується++Якщо у `forEach()` задано параметр `thisArg`, його буде використано як значення `this` у функції зворотного виклику. В загальному випадку значення `this`, яке бачитиме функція `callback` визначається згідно з [загальними правилами визначення значення `this`, доступного для функції](/en-US/docs/Web/JavaScript/Reference/Operators/this).++Діапазон елементів, що опрацьовуються функцією `forEach()`, задається до першого виклику `callbackFn`. Елементи, які будуть присвоєні до індексів, що вже пройдені методом, або ж до індексів за межами цього діапазону, не будуть опрацьовані функцією `callbackFn`. Якщо наявні елементи змінюються чи видаляються, то до `callbackFn` буде передано їх фактичне значення на момент, коли функція `forEach()` їх опрацьовує. Ті елементи, які були видалені до того, як їх опрацювала функція, опрацьовані не будуть. Якщо елементи, які уже були опрацьовані, видаляються (наприклад, за допомогою {{jsxref("Array.prototype.shift()", "shift()")}}) під час проходження по масиву, наступні елементи буде пропущено. ([Дивіться цей приклад нижче](#modifying_the_array_during_iteration).)++**Обережно:** Одночасні модифікації такого типу, як описано в попередньому абзаці, часто приводять до коду, який важко зрозуміти. Загалом заведено уникати такого запису (окрім особливих випадків).++Метод `forEach()` виконує функцію `callbackFn` один раз для кожного елементу в масиві, і на відміну від {{jsxref("Array.prototype.map()", "map()")}} чи+{{jsxref("Array.prototype.reduce()", "reduce()")}} він завжди повертає значення {{jsxref("undefined")}}, і не придатний до послідовних викликів. Зазвичай його використовують для виконання побічних ефектів наприкінці послідовності.++Метод `forEach()` не змінює масив, на якому він викликається. (Хоча,+`callbackFn` може це робити)++> **Зауваження:** Не існує способу зупинити або перервати цикл `forEach()` окрім +> як шляхом викидання винятку. Якщо вам потрібна можливість перервати цикл, метод `forEach()`+> для цього не підходить.+>+> Зупинка циклу до його завершення може бути досягнена шляхом використання:+>+> - Простого циклу [for](/en-US/docs/Web/JavaScript/Reference/Statements/for)+> - Циклів [for...of](/en-US/docs/Web/JavaScript/Reference/Statements/for...of)+>   або [for...in](/en-US/docs/Web/JavaScript/Reference/Statements/for...in)+> - {{jsxref("Array.prototype.every()")}}+> - {{jsxref("Array.prototype.some()")}}+> - {{jsxref("Array.prototype.find()")}}+> - {{jsxref("Array.prototype.findIndex()")}}+>+> Методи масиву, як от {{jsxref("Array.prototype.every()", "every()")}},+> {{jsxref("Array.prototype.some()", "some()")}}, {{jsxref("Array.prototype.find()", "find()")}}, і {{jsxref("Array.prototype.findIndex()", "findIndex()")}} перевіряють+> елементи масиву за допомогою предикату, що повертає істинне значення, якщо +> продовження перебирання масиву є необхідним.++> **Зауваження:** `forEach` приймає синхронну функцію.+>+> `forEach` не чекає на завершення промісів. Впевніться, що ви розумієте можливі наслідки під час+> використання промісів (чи асинхронних функцій) як аргументів для `forEach`.+>+> ```js+> let ratings = [5, 4, 5];+> let sum = 0;+>+> let sumFunction = async function (a, b)+> {+>   return a + b+> }+>+> ratings.forEach(async function(rating) {+>   sum = await sumFunction(sum, rating)+> })+>+> console.log(sum)+> // Наївно очікуваний результат: 14+> // Фактичний результат: 0+> ```++## Поліфіл++Метод `forEach()` було додано до стандарту ECMA-262 у його 5-й редакції. Тобто, він може бути доступний не у всіх його реалізаціях. Цю проблему можна обійти шляхом додавання наступного коду на початку скрипту. Фактично це дозволить використовувати `forEach()` у реалізаціях ECMA-262, які не підтримують його нативно.++Це той самий алгоритм, який наведено у 5-й редакції ECMA-262, з поправкою на припущення, що {{jsxref("Object")}} і {{jsxref("TypeError")}} мають свої початкові значення, і що `fun.call` зводиться до початкового значення {{jsxref("Function.prototype.call()")}}.++```js+// Етапи створення ECMA-262, 5 редакція, 15.4.4.18+// Посилання: https://es5.github.io/#x15.4.4.18++if (!Array.prototype['forEach']) {++  Array.prototype.forEach = function(callback, thisArg) {++    if (this == null) { throw new TypeError('Array.prototype.forEach called on null or undefined'); }++    var T, k;+    // 1. Нехай O є результатом викликання функції toObject(), що передає+    // значення |this| як аргумент.+    var O = Object(this);++    // 2. Нехай lenValue є результатом викликання внутрішнього методу Get()+    // об'єкту O з аргументом "length".+    // 3. Нехай len буде значенням toUint32(lenValue).+    var len = O.length >>> 0;++    // 4. Якщо isCallable(callback) є хибою, викинемо виняток TypeError.+    // Дивіться: https://es5.github.com/#x9.11+    if (typeof callback !== "function") { throw new TypeError(callback + ' is not a function'); }++    // 5. Якщо дано аргумент thisArg, нехай T буде thisArg;+    // інакше нехай T буде невизначено.+    if (arguments.length > 1) { T = thisArg; }++    // 6. Нехай k буде 0+    k = 0;++    // 7. Повторюємо, доки k < len+    while (k < len) {++      var kValue;++      // a. Нехай Pk буде ToString(k).+      //    Таке перетворення відбувається неявно для лівих операндів оператора "in"+      // b. Нехай kPresent буде результатом викликання внутрішнього+      //    методу HasProperty об'єкту O з аргументом Pk.+      //    Допускається суміщати цей крок із c+      // c. Якщо kPresent є істиною, тоді+      if (k in O) {++        // i. Нехай kValue буде результатом викликання внутрішнього методу Get+        // об'єкта O з аргументом Pk.+        kValue = O[k];++        // ii. Викличемо внутрішній метод Call функції зворотного виклику+        // з T як значенням "this", і набором аргументів, що містять kValue, k, and O.+        callback.call(T, kValue, k, O);+      }+      // d. Збільшуємо k на 1.+      k++;+    }+    // 8. Повертаємо undefined+  };+}+```++## Приклади++### Нічого не відбувається на неініціалізованих значеннях (розріджені масиви)++```js+const arraySparse = [1,3,,7]+let numCallbackRuns = 0++arraySparse.forEach(function(element) {+  console.log(element)+  numCallbackRuns+++})++console.log("numCallbackRuns: ", numCallbackRuns)++// 1+// 3+// 7+// numCallbackRuns: 3+// коментар: як можна побачити, пропущене значення між 3 та 7 не викликало функції зворотного виклику+```++### Перетворення циклу for на forEach++```js+const items = ['item1', 'item2', 'item3']+const copyItems = []++// до+for (let i = 0; i < items.length; i++) {+  copyItems.push(items[i])+}++// після+items.forEach(function(item){+  copyItems.push(item)+})+```++### Друк вмісту масиву++> **Зауваження:** Щоб показати вміст масиву у консолі,+> можна застосувати метод {{domxref("console/table", "console.table()")}}, який друкує+> відформатований варіант масиву.+>+> Приклад далі ілюструє альтернативний підхід, із застосуванням+> `forEach()`.++Наступний код друкує рядок для кожного елементу в масиві:++```js+function logArrayElements(element, index, array) {+  console.log('a[' + index + '] = ' + element)+}++// Зауважте, що порядковий номер 2 пропущено, оскільки в масиві не існує+// елементу на цій позиції...+[2, 5, , 9].forEach(logArrayElements)+// logs:+// a[0] = 2+// a[1] = 5+// a[3] = 9+```++### Застосування thisArg++Наступний (надуманий) приклад оновлює властивості об'єкту, з урахуванням поданих елементів масиву:++```js+function Counter() {+  this.sum = 0+  this.count = 0+}+Counter.prototype.add = function(array) {+  array.forEach(function countEntry(entry) {+    this.sum += entry+    ++this.count+  }, this)+}++const obj = new Counter()+obj.add([2, 5, 9])+obj.count+// 3+obj.sum+// 16+```++Оскільки параметр `thisArg` (`this`) було задано в `forEach()`, він передавався до функції `callback` кожного разу, коли вона викликалась. Сама функція зворотного виклику використовує її як значення `this`.++> **Зауваження:** Якщо при передачі функції зворотного виклику було використано вираз+> [стрілкової функції](/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions), значення параметру `thisArg` можна опустити,+> оскільки всі стрілкові функції прив'язують значення {{jsxref("Operators/this", "this")}}+> лексично.++### Функція копіювання об'єкту++Наступний код створює копію поданого об'єкту.++Існує декілька різних способів створити копію об'єкту. Спосіб, що наведено нижче - це лише один із багатьох, наведений для ілюстрації того, як `Array.prototype.forEach()` працює шляхом використання методів `Object.*` для роботи з властивостями, що з'явились у ECMAScript 5.

ілюстрації того, як Array.prototype.forEach() працює шляхом використання методів Object.* для роботи з властивостями, що з'явились у ECMAScript 5. —» пояснення, як працюєArray.prototype.forEach() за допомогою метавластивості Object.*, що з'явились в ECMAScript 5. Чи я якось не так зрозумів? Сумнів маю щодо «мета»

AdriandeCita

comment created time in 17 days

Pull request review commentwebdoky/content

translate web-js-ref-global_objects-array-foreach page

+---+title: Array.prototype.forEach()+slug: Web/JavaScript/Reference/Global_Objects/Array/forEach+tags:+  - Array+  - ECMAScript 5+  - JavaScript+  - Method+  - Prototype+  - Reference+  - Polyfill+browser-compat: javascript.builtins.Array.forEach+---+{{JSRef}}++Метод **`forEach()`** виконує дану функцію один раз для кожного елементу масиву.++{{EmbedInteractiveExample("pages/js/array-foreach.html")}}++## Синтаксис++```js+// Стрілкова функція+forEach((element) => { ... } )+forEach((element, index) => { ... } )+forEach((element, index, array) => { ... } )++// Функція зворотного виклику+forEach(callbackFn)+forEach(callbackFn, thisArg)++// Функція зворотного виклику, оголошена на місці+forEach(function callbackFn(element) { ... })+forEach(function callbackFn(element, index) { ... })+forEach(function callbackFn(element, index, array){ ... })+forEach(function callbackFn(element, index, array) { ... }, thisArg)+```++### Параметри++- `callbackFn`++  - : Функція, яку буде викликано на кожному елементі. Приймає від одного до трьох аргументів:++    - `element`+      - : Поточний елемент масиву, який зараз опрацьовується.+    - `index` {{optional_inline}}+      - : Порядковий номер цього елементу в масиві.+    - `array` {{optional_inline}}+      - : Власне масив, на якому було викликано `forEach()`.++- `thisArg` {{optional_inline}}+  - : Значення, яке буде підставлено як `this` під час виконання `callbackFn`.++### Результат++`undefined`.++## Опис++Метод `forEach()` викликає подану функцію `callbackFn` один раз для кожного елементу в масиві, у порядку зростання їх порядкового номера. Функція не викликається для елементів, які було видалено, або які не було ініціалізовано. (для розріджених масивів [дивіться приклад нижче](#sparsearray).)++Функція `callbackFn` викликається з трьома аргументами:++1.  значення елементу+2.  порядковий номер елементу+3.  об'єкт масиву, який наразі опрацьовується++Якщо у `forEach()` задано параметр `thisArg`, його буде використано як значення `this` у функції зворотного виклику. В загальному випадку значення `this`, яке бачитиме функція `callback` визначається згідно з [загальними правилами визначення значення `this`, доступного для функції](/en-US/docs/Web/JavaScript/Reference/Operators/this).++Діапазон елементів, що опрацьовуються функцією `forEach()`, задається до першого виклику `callbackFn`. Елементи, які будуть присвоєні до індексів, що вже пройдені методом, або ж до індексів за межами цього діапазону, не будуть опрацьовані функцією `callbackFn`. Якщо наявні елементи змінюються чи видаляються, то до `callbackFn` буде передано їх фактичне значення на момент, коли функція `forEach()` їх опрацьовує. Ті елементи, які були видалені до того, як їх опрацювала функція, опрацьовані не будуть. Якщо елементи, які уже були опрацьовані, видаляються (наприклад, за допомогою {{jsxref("Array.prototype.shift()", "shift()")}}) під час проходження по масиву, наступні елементи буде пропущено. ([Дивіться цей приклад нижче](#modifying_the_array_during_iteration).)++**Обережно:** Одночасні модифікації такого типу, як описано в попередньому абзаці, часто приводять до коду, який важко зрозуміти. Загалом заведено уникати такого запису (окрім особливих випадків).++Метод `forEach()` виконує функцію `callbackFn` один раз для кожного елементу в масиві, і на відміну від {{jsxref("Array.prototype.map()", "map()")}} чи+{{jsxref("Array.prototype.reduce()", "reduce()")}} він завжди повертає значення {{jsxref("undefined")}}, і не придатний до послідовних викликів. Зазвичай його використовують для виконання побічних ефектів наприкінці послідовності.++Метод `forEach()` не змінює масив, на якому він викликається. (Хоча,+`callbackFn` може це робити)++> **Зауваження:** Не існує способу зупинити або перервати цикл `forEach()` окрім +> як шляхом викидання винятку. Якщо вам потрібна можливість перервати цикл, метод `forEach()`+> для цього не підходить.+>+> Зупинка циклу до його завершення може бути досягнена шляхом використання:+>+> - Простого циклу [for](/en-US/docs/Web/JavaScript/Reference/Statements/for)+> - Циклів [for...of](/en-US/docs/Web/JavaScript/Reference/Statements/for...of)+>   або [for...in](/en-US/docs/Web/JavaScript/Reference/Statements/for...in)+> - {{jsxref("Array.prototype.every()")}}+> - {{jsxref("Array.prototype.some()")}}+> - {{jsxref("Array.prototype.find()")}}+> - {{jsxref("Array.prototype.findIndex()")}}+>+> Методи масиву, як от {{jsxref("Array.prototype.every()", "every()")}},+> {{jsxref("Array.prototype.some()", "some()")}}, {{jsxref("Array.prototype.find()", "find()")}}, і {{jsxref("Array.prototype.findIndex()", "findIndex()")}} перевіряють+> елементи масиву за допомогою предикату, що повертає істинне значення, якщо +> продовження перебирання масиву є необхідним.++> **Зауваження:** `forEach` приймає синхронну функцію.+>+> `forEach` не чекає на завершення промісів. Впевніться, що ви розумієте можливі наслідки під час+> використання промісів (чи асинхронних функцій) як аргументів для `forEach`.

як аргументів —» аргументами

AdriandeCita

comment created time in 17 days

Pull request review commentwebdoky/content

translate web-js-ref-global_objects-array-foreach page

+---+title: Array.prototype.forEach()+slug: Web/JavaScript/Reference/Global_Objects/Array/forEach+tags:+  - Array+  - ECMAScript 5+  - JavaScript+  - Method+  - Prototype+  - Reference+  - Polyfill+browser-compat: javascript.builtins.Array.forEach+---+{{JSRef}}++Метод **`forEach()`** виконує дану функцію один раз для кожного елементу масиву.++{{EmbedInteractiveExample("pages/js/array-foreach.html")}}++## Синтаксис++```js+// Стрілкова функція+forEach((element) => { ... } )+forEach((element, index) => { ... } )+forEach((element, index, array) => { ... } )++// Функція зворотного виклику+forEach(callbackFn)+forEach(callbackFn, thisArg)++// Функція зворотного виклику, оголошена на місці+forEach(function callbackFn(element) { ... })+forEach(function callbackFn(element, index) { ... })+forEach(function callbackFn(element, index, array){ ... })+forEach(function callbackFn(element, index, array) { ... }, thisArg)+```++### Параметри++- `callbackFn`++  - : Функція, яку буде викликано на кожному елементі. Приймає від одного до трьох аргументів:++    - `element`+      - : Поточний елемент масиву, який зараз опрацьовується.+    - `index` {{optional_inline}}+      - : Порядковий номер цього елементу в масиві.+    - `array` {{optional_inline}}+      - : Власне масив, на якому було викликано `forEach()`.++- `thisArg` {{optional_inline}}+  - : Значення, яке буде підставлено як `this` під час виконання `callbackFn`.++### Результат++`undefined`.++## Опис++Метод `forEach()` викликає подану функцію `callbackFn` один раз для кожного елементу в масиві, у порядку зростання їх порядкового номера. Функція не викликається для елементів, які було видалено, або які не було ініціалізовано. (для розріджених масивів [дивіться приклад нижче](#sparsearray).)++Функція `callbackFn` викликається з трьома аргументами:++1.  значення елементу+2.  порядковий номер елементу+3.  об'єкт масиву, який наразі опрацьовується++Якщо у `forEach()` задано параметр `thisArg`, його буде використано як значення `this` у функції зворотного виклику. В загальному випадку значення `this`, яке бачитиме функція `callback` визначається згідно з [загальними правилами визначення значення `this`, доступного для функції](/en-US/docs/Web/JavaScript/Reference/Operators/this).++Діапазон елементів, що опрацьовуються функцією `forEach()`, задається до першого виклику `callbackFn`. Елементи, які будуть присвоєні до індексів, що вже пройдені методом, або ж до індексів за межами цього діапазону, не будуть опрацьовані функцією `callbackFn`. Якщо наявні елементи змінюються чи видаляються, то до `callbackFn` буде передано їх фактичне значення на момент, коли функція `forEach()` їх опрацьовує. Ті елементи, які були видалені до того, як їх опрацювала функція, опрацьовані не будуть. Якщо елементи, які уже були опрацьовані, видаляються (наприклад, за допомогою {{jsxref("Array.prototype.shift()", "shift()")}}) під час проходження по масиву, наступні елементи буде пропущено. ([Дивіться цей приклад нижче](#modifying_the_array_during_iteration).)++**Обережно:** Одночасні модифікації такого типу, як описано в попередньому абзаці, часто приводять до коду, який важко зрозуміти. Загалом заведено уникати такого запису (окрім особливих випадків).++Метод `forEach()` виконує функцію `callbackFn` один раз для кожного елементу в масиві, і на відміну від {{jsxref("Array.prototype.map()", "map()")}} чи+{{jsxref("Array.prototype.reduce()", "reduce()")}} він завжди повертає значення {{jsxref("undefined")}}, і не придатний до послідовних викликів. Зазвичай його використовують для виконання побічних ефектів наприкінці послідовності.++Метод `forEach()` не змінює масив, на якому він викликається. (Хоча,+`callbackFn` може це робити)++> **Зауваження:** Не існує способу зупинити або перервати цикл `forEach()` окрім +> як шляхом викидання винятку. Якщо вам потрібна можливість перервати цикл, метод `forEach()`+> для цього не підходить.+>+> Зупинка циклу до його завершення може бути досягнена шляхом використання:+>+> - Простого циклу [for](/en-US/docs/Web/JavaScript/Reference/Statements/for)+> - Циклів [for...of](/en-US/docs/Web/JavaScript/Reference/Statements/for...of)+>   або [for...in](/en-US/docs/Web/JavaScript/Reference/Statements/for...in)+> - {{jsxref("Array.prototype.every()")}}+> - {{jsxref("Array.prototype.some()")}}+> - {{jsxref("Array.prototype.find()")}}+> - {{jsxref("Array.prototype.findIndex()")}}+>+> Методи масиву, як от {{jsxref("Array.prototype.every()", "every()")}},+> {{jsxref("Array.prototype.some()", "some()")}}, {{jsxref("Array.prototype.find()", "find()")}}, і {{jsxref("Array.prototype.findIndex()", "findIndex()")}} перевіряють+> елементи масиву за допомогою предикату, що повертає істинне значення, якщо +> продовження перебирання масиву є необхідним.++> **Зауваження:** `forEach` приймає синхронну функцію.+>+> `forEach` не чекає на завершення промісів. Впевніться, що ви розумієте можливі наслідки під час+> використання промісів (чи асинхронних функцій) як аргументів для `forEach`.+>+> ```js+> let ratings = [5, 4, 5];+> let sum = 0;+>+> let sumFunction = async function (a, b)+> {+>   return a + b+> }+>+> ratings.forEach(async function(rating) {+>   sum = await sumFunction(sum, rating)+> })+>+> console.log(sum)+> // Наївно очікуваний результат: 14+> // Фактичний результат: 0+> ```++## Поліфіл++Метод `forEach()` було додано до стандарту ECMA-262 у його 5-й редакції. Тобто, він може бути доступний не у всіх його реалізаціях. Цю проблему можна обійти шляхом додавання наступного коду на початку скрипту. Фактично це дозволить використовувати `forEach()` у реалізаціях ECMA-262, які не підтримують його нативно.++Це той самий алгоритм, який наведено у 5-й редакції ECMA-262, з поправкою на припущення, що {{jsxref("Object")}} і {{jsxref("TypeError")}} мають свої початкові значення, і що `fun.call` зводиться до початкового значення {{jsxref("Function.prototype.call()")}}.++```js+// Етапи створення ECMA-262, 5 редакція, 15.4.4.18+// Посилання: https://es5.github.io/#x15.4.4.18++if (!Array.prototype['forEach']) {++  Array.prototype.forEach = function(callback, thisArg) {++    if (this == null) { throw new TypeError('Array.prototype.forEach called on null or undefined'); }++    var T, k;+    // 1. Нехай O є результатом викликання функції toObject(), що передає+    // значення |this| як аргумент.+    var O = Object(this);++    // 2. Нехай lenValue є результатом викликання внутрішнього методу Get()+    // об'єкту O з аргументом "length".+    // 3. Нехай len буде значенням toUint32(lenValue).+    var len = O.length >>> 0;++    // 4. Якщо isCallable(callback) є хибою, викинемо виняток TypeError.+    // Дивіться: https://es5.github.com/#x9.11+    if (typeof callback !== "function") { throw new TypeError(callback + ' is not a function'); }++    // 5. Якщо дано аргумент thisArg, нехай T буде thisArg;+    // інакше нехай T буде невизначено.+    if (arguments.length > 1) { T = thisArg; }++    // 6. Нехай k буде 0+    k = 0;++    // 7. Повторюємо, доки k < len+    while (k < len) {++      var kValue;++      // a. Нехай Pk буде ToString(k).+      //    Таке перетворення відбувається неявно для лівих операндів оператора "in"+      // b. Нехай kPresent буде результатом викликання внутрішнього+      //    методу HasProperty об'єкту O з аргументом Pk.+      //    Допускається суміщати цей крок із c+      // c. Якщо kPresent є істиною, тоді+      if (k in O) {++        // i. Нехай kValue буде результатом викликання внутрішнього методу Get+        // об'єкта O з аргументом Pk.+        kValue = O[k];++        // ii. Викличемо внутрішній метод Call функції зворотного виклику+        // з T як значенням "this", і набором аргументів, що містять kValue, k, and O.+        callback.call(T, kValue, k, O);+      }+      // d. Збільшуємо k на 1.+      k++;+    }+    // 8. Повертаємо undefined+  };+}+```++## Приклади++### Нічого не відбувається на неініціалізованих значеннях (розріджені масиви)++```js+const arraySparse = [1,3,,7]+let numCallbackRuns = 0++arraySparse.forEach(function(element) {+  console.log(element)+  numCallbackRuns+++})++console.log("numCallbackRuns: ", numCallbackRuns)++// 1+// 3+// 7+// numCallbackRuns: 3+// коментар: як можна побачити, пропущене значення між 3 та 7 не викликало функції зворотного виклику+```++### Перетворення циклу for на forEach++```js+const items = ['item1', 'item2', 'item3']+const copyItems = []++// до+for (let i = 0; i < items.length; i++) {+  copyItems.push(items[i])+}++// після+items.forEach(function(item){+  copyItems.push(item)+})+```++### Друк вмісту масиву++> **Зауваження:** Щоб показати вміст масиву у консолі,+> можна застосувати метод {{domxref("console/table", "console.table()")}}, який друкує+> відформатований варіант масиву.+>+> Приклад далі ілюструє альтернативний підхід, із застосуванням+> `forEach()`.++Наступний код друкує рядок для кожного елементу в масиві:++```js+function logArrayElements(element, index, array) {+  console.log('a[' + index + '] = ' + element)+}++// Зауважте, що порядковий номер 2 пропущено, оскільки в масиві не існує+// елементу на цій позиції...+[2, 5, , 9].forEach(logArrayElements)+// logs:+// a[0] = 2+// a[1] = 5+// a[3] = 9+```++### Застосування thisArg++Наступний (надуманий) приклад оновлює властивості об'єкту, з урахуванням поданих елементів масиву:++```js+function Counter() {+  this.sum = 0+  this.count = 0+}+Counter.prototype.add = function(array) {+  array.forEach(function countEntry(entry) {+    this.sum += entry+    ++this.count+  }, this)+}++const obj = new Counter()+obj.add([2, 5, 9])+obj.count+// 3+obj.sum+// 16+```++Оскільки параметр `thisArg` (`this`) було задано в `forEach()`, він передавався до функції `callback` кожного разу, коли вона викликалась. Сама функція зворотного виклику використовує її як значення `this`.++> **Зауваження:** Якщо при передачі функції зворотного виклику було використано вираз

при передачі —» під час передавання

AdriandeCita

comment created time in 17 days

Pull request review commentwebdoky/content

translate web-js-ref-global_objects-array-foreach page

+---+title: Array.prototype.forEach()+slug: Web/JavaScript/Reference/Global_Objects/Array/forEach+tags:+  - Array+  - ECMAScript 5+  - JavaScript+  - Method+  - Prototype+  - Reference+  - Polyfill+browser-compat: javascript.builtins.Array.forEach+---+{{JSRef}}++Метод **`forEach()`** виконує дану функцію один раз для кожного елементу масиву.++{{EmbedInteractiveExample("pages/js/array-foreach.html")}}++## Синтаксис++```js+// Стрілкова функція+forEach((element) => { ... } )+forEach((element, index) => { ... } )+forEach((element, index, array) => { ... } )++// Функція зворотного виклику+forEach(callbackFn)+forEach(callbackFn, thisArg)++// Функція зворотного виклику, оголошена на місці+forEach(function callbackFn(element) { ... })+forEach(function callbackFn(element, index) { ... })+forEach(function callbackFn(element, index, array){ ... })+forEach(function callbackFn(element, index, array) { ... }, thisArg)+```++### Параметри++- `callbackFn`++  - : Функція, яку буде викликано на кожному елементі. Приймає від одного до трьох аргументів:++    - `element`+      - : Поточний елемент масиву, який зараз опрацьовується.+    - `index` {{optional_inline}}+      - : Порядковий номер цього елементу в масиві.+    - `array` {{optional_inline}}+      - : Власне масив, на якому було викликано `forEach()`.++- `thisArg` {{optional_inline}}+  - : Значення, яке буде підставлено як `this` під час виконання `callbackFn`.++### Результат++`undefined`.++## Опис++Метод `forEach()` викликає подану функцію `callbackFn` один раз для кожного елементу в масиві, у порядку зростання їх порядкового номера. Функція не викликається для елементів, які було видалено, або які не було ініціалізовано. (для розріджених масивів [дивіться приклад нижче](#sparsearray).)++Функція `callbackFn` викликається з трьома аргументами:++1.  значення елементу+2.  порядковий номер елементу+3.  об'єкт масиву, який наразі опрацьовується++Якщо у `forEach()` задано параметр `thisArg`, його буде використано як значення `this` у функції зворотного виклику. В загальному випадку значення `this`, яке бачитиме функція `callback` визначається згідно з [загальними правилами визначення значення `this`, доступного для функції](/en-US/docs/Web/JavaScript/Reference/Operators/this).++Діапазон елементів, що опрацьовуються функцією `forEach()`, задається до першого виклику `callbackFn`. Елементи, які будуть присвоєні до індексів, що вже пройдені методом, або ж до індексів за межами цього діапазону, не будуть опрацьовані функцією `callbackFn`. Якщо наявні елементи змінюються чи видаляються, то до `callbackFn` буде передано їх фактичне значення на момент, коли функція `forEach()` їх опрацьовує. Ті елементи, які були видалені до того, як їх опрацювала функція, опрацьовані не будуть. Якщо елементи, які уже були опрацьовані, видаляються (наприклад, за допомогою {{jsxref("Array.prototype.shift()", "shift()")}}) під час проходження по масиву, наступні елементи буде пропущено. ([Дивіться цей приклад нижче](#modifying_the_array_during_iteration).)++**Обережно:** Одночасні модифікації такого типу, як описано в попередньому абзаці, часто приводять до коду, який важко зрозуміти. Загалом заведено уникати такого запису (окрім особливих випадків).++Метод `forEach()` виконує функцію `callbackFn` один раз для кожного елементу в масиві, і на відміну від {{jsxref("Array.prototype.map()", "map()")}} чи+{{jsxref("Array.prototype.reduce()", "reduce()")}} він завжди повертає значення {{jsxref("undefined")}}, і не придатний до послідовних викликів. Зазвичай його використовують для виконання побічних ефектів наприкінці послідовності.++Метод `forEach()` не змінює масив, на якому він викликається. (Хоча,+`callbackFn` може це робити)++> **Зауваження:** Не існує способу зупинити або перервати цикл `forEach()` окрім +> як шляхом викидання винятку. Якщо вам потрібна можливість перервати цикл, метод `forEach()`+> для цього не підходить.+>+> Зупинка циклу до його завершення може бути досягнена шляхом використання:+>+> - Простого циклу [for](/en-US/docs/Web/JavaScript/Reference/Statements/for)+> - Циклів [for...of](/en-US/docs/Web/JavaScript/Reference/Statements/for...of)+>   або [for...in](/en-US/docs/Web/JavaScript/Reference/Statements/for...in)+> - {{jsxref("Array.prototype.every()")}}+> - {{jsxref("Array.prototype.some()")}}+> - {{jsxref("Array.prototype.find()")}}+> - {{jsxref("Array.prototype.findIndex()")}}+>+> Методи масиву, як от {{jsxref("Array.prototype.every()", "every()")}},+> {{jsxref("Array.prototype.some()", "some()")}}, {{jsxref("Array.prototype.find()", "find()")}}, і {{jsxref("Array.prototype.findIndex()", "findIndex()")}} перевіряють+> елементи масиву за допомогою предикату, що повертає істинне значення, якщо +> продовження перебирання масиву є необхідним.++> **Зауваження:** `forEach` приймає синхронну функцію.+>+> `forEach` не чекає на завершення промісів. Впевніться, що ви розумієте можливі наслідки під час+> використання промісів (чи асинхронних функцій) як аргументів для `forEach`.+>+> ```js+> let ratings = [5, 4, 5];+> let sum = 0;+>+> let sumFunction = async function (a, b)+> {+>   return a + b+> }+>+> ratings.forEach(async function(rating) {+>   sum = await sumFunction(sum, rating)+> })+>+> console.log(sum)+> // Наївно очікуваний результат: 14+> // Фактичний результат: 0

вивід?

AdriandeCita

comment created time in 17 days

Pull request review commentwebdoky/content

translate web-js-ref-global_objects-array-foreach page

+---+title: Array.prototype.forEach()+slug: Web/JavaScript/Reference/Global_Objects/Array/forEach+tags:+  - Array+  - ECMAScript 5+  - JavaScript+  - Method+  - Prototype+  - Reference+  - Polyfill+browser-compat: javascript.builtins.Array.forEach+---+{{JSRef}}++Метод **`forEach()`** виконує дану функцію один раз для кожного елементу масиву.++{{EmbedInteractiveExample("pages/js/array-foreach.html")}}++## Синтаксис++```js+// Стрілкова функція+forEach((element) => { ... } )+forEach((element, index) => { ... } )+forEach((element, index, array) => { ... } )++// Функція зворотного виклику+forEach(callbackFn)+forEach(callbackFn, thisArg)++// Функція зворотного виклику, оголошена на місці+forEach(function callbackFn(element) { ... })+forEach(function callbackFn(element, index) { ... })+forEach(function callbackFn(element, index, array){ ... })+forEach(function callbackFn(element, index, array) { ... }, thisArg)+```++### Параметри++- `callbackFn`++  - : Функція, яку буде викликано на кожному елементі. Приймає від одного до трьох аргументів:++    - `element`+      - : Поточний елемент масиву, який зараз опрацьовується.+    - `index` {{optional_inline}}+      - : Порядковий номер цього елементу в масиві.+    - `array` {{optional_inline}}+      - : Власне масив, на якому було викликано `forEach()`.++- `thisArg` {{optional_inline}}+  - : Значення, яке буде підставлено як `this` під час виконання `callbackFn`.++### Результат++`undefined`.++## Опис++Метод `forEach()` викликає подану функцію `callbackFn` один раз для кожного елементу в масиві, у порядку зростання їх порядкового номера. Функція не викликається для елементів, які було видалено, або які не було ініціалізовано. (для розріджених масивів [дивіться приклад нижче](#sparsearray).)++Функція `callbackFn` викликається з трьома аргументами:++1.  значення елементу+2.  порядковий номер елементу+3.  об'єкт масиву, який наразі опрацьовується

наразі —» зараз або у цей час

AdriandeCita

comment created time in 17 days

PullRequestReviewEvent

Pull request review commentwebdoky/content

translate web-js-ref-global_objects-array-foreach page

+---+title: Array.prototype.forEach()+slug: Web/JavaScript/Reference/Global_Objects/Array/forEach+tags:+  - Array+  - ECMAScript 5+  - JavaScript+  - Method+  - Prototype+  - Reference+  - Polyfill+browser-compat: javascript.builtins.Array.forEach+---+{{JSRef}}++Метод **`forEach()`** виконує дану функцію один раз для кожного елементу масиву.++{{EmbedInteractiveExample("pages/js/array-foreach.html")}}++## Синтаксис++```js+// Стрілкова функція+forEach((element) => { ... } )+forEach((element, index) => { ... } )+forEach((element, index, array) => { ... } )++// Функція зворотного виклику+forEach(callbackFn)+forEach(callbackFn, thisArg)++// Функція зворотного виклику, оголошена на місці+forEach(function callbackFn(element) { ... })+forEach(function callbackFn(element, index) { ... })+forEach(function callbackFn(element, index, array){ ... })+forEach(function callbackFn(element, index, array) { ... }, thisArg)+```++### Параметри++- `callbackFn`++  - : Функція, яку буде викликано на кожному елементі. Приймає від одного до трьох аргументів:++    - `element`+      - : Поточний елемент масиву, який зараз опрацьовується.+    - `index` {{optional_inline}}+      - : Порядковий номер цього елементу в масиві.+    - `array` {{optional_inline}}+      - : Власне масив, на якому було викликано `forEach()`.++- `thisArg` {{optional_inline}}+  - : Значення, яке буде підставлено як `this` під час виконання `callbackFn`.++### Результат++`undefined`.++## Опис++Метод `forEach()` викликає подану функцію `callbackFn` один раз для кожного елементу в масиві, у порядку зростання їх порядкового номера. Функція не викликається для елементів, які було видалено, або які не було ініціалізовано. (для розріджених масивів [дивіться приклад нижче](#sparsearray).)++Функція `callbackFn` викликається з трьома аргументами:++1.  значення елементу+2.  порядковий номер елементу+3.  об'єкт масиву, який наразі опрацьовується++Якщо у `forEach()` задано параметр `thisArg`, його буде використано як значення `this` у функції зворотного виклику. В загальному випадку значення `this`, яке бачитиме функція `callback` визначається згідно з [загальними правилами визначення значення `this`, доступного для функції](/en-US/docs/Web/JavaScript/Reference/Operators/this).++Діапазон елементів, що опрацьовуються функцією `forEach()`, задається до першого виклику `callbackFn`. Елементи, які будуть присвоєні до індексів, що вже пройдені методом, або ж до індексів за межами цього діапазону, не будуть опрацьовані функцією `callbackFn`. Якщо наявні елементи змінюються чи видаляються, то до `callbackFn` буде передано їх фактичне значення на момент, коли функція `forEach()` їх опрацьовує. Ті елементи, які були видалені до того, як їх опрацювала функція, опрацьовані не будуть. Якщо елементи, які уже були опрацьовані, видаляються (наприклад, за допомогою {{jsxref("Array.prototype.shift()", "shift()")}}) під час проходження по масиву, наступні елементи буде пропущено. ([Дивіться цей приклад нижче](#modifying_the_array_during_iteration).)++**Обережно:** Одночасні модифікації такого типу, як описано в попередньому абзаці, часто приводять до коду, який важко зрозуміти. Загалом заведено уникати такого запису (окрім особливих випадків).++Метод `forEach()` виконує функцію `callbackFn` один раз для кожного елементу в масиві, і на відміну від {{jsxref("Array.prototype.map()", "map()")}} чи+{{jsxref("Array.prototype.reduce()", "reduce()")}} він завжди повертає значення {{jsxref("undefined")}}, і не придатний до послідовних викликів. Зазвичай його використовують для виконання побічних ефектів наприкінці послідовності.++Метод `forEach()` не змінює масив, на якому він викликається. (Хоча,+`callbackFn` може це робити)++> **Зауваження:** Не існує способу зупинити або перервати цикл `forEach()` окрім +> як шляхом викидання винятку. Якщо вам потрібна можливість перервати цикл, метод `forEach()`+> для цього не підходить.+>+> Зупинка циклу до його завершення може бути досягнена шляхом використання:+>+> - Простого циклу [for](/en-US/docs/Web/JavaScript/Reference/Statements/for)+> - Циклів [for...of](/en-US/docs/Web/JavaScript/Reference/Statements/for...of)+>   або [for...in](/en-US/docs/Web/JavaScript/Reference/Statements/for...in)+> - {{jsxref("Array.prototype.every()")}}+> - {{jsxref("Array.prototype.some()")}}+> - {{jsxref("Array.prototype.find()")}}+> - {{jsxref("Array.prototype.findIndex()")}}+>+> Методи масиву, як от {{jsxref("Array.prototype.every()", "every()")}},+> {{jsxref("Array.prototype.some()", "some()")}}, {{jsxref("Array.prototype.find()", "find()")}}, і {{jsxref("Array.prototype.findIndex()", "findIndex()")}} перевіряють+> елементи масиву за допомогою предикату, що повертає істинне значення, якщо +> продовження перебирання масиву є необхідним.++> **Зауваження:** `forEach` приймає синхронну функцію.+>+> `forEach` не чекає на завершення промісів. Впевніться, що ви розумієте можливі наслідки під час+> використання промісів (чи асинхронних функцій) як аргументів для `forEach`.+>+> ```js+> let ratings = [5, 4, 5];+> let sum = 0;+>+> let sumFunction = async function (a, b)+> {+>   return a + b+> }+>+> ratings.forEach(async function(rating) {+>   sum = await sumFunction(sum, rating)+> })+>+> console.log(sum)+> // Наївно очікуваний результат: 14

вивід?

AdriandeCita

comment created time in 17 days

Pull request review commentwebdoky/content

translate reference page for Array.slice() method

+---+title: Array.prototype.slice()+slug: Web/JavaScript/Reference/Global_Objects/Array/slice+tags:+  - Array+  - JavaScript+  - Method+  - Prototype+  - Reference+browser-compat: javascript.builtins.Array.slice+---+{{JSRef}}++Метод **`slice()`** повертає поверхневу копію (зріз) певної частини масиву, взяту від позиції `start` до `end` (не включно з `end`), у вигляді нового об'єкту масиву. Значення `start` та `end` означають індекси елементів цього масиву. Початковий масив не змінюється.++{{EmbedInteractiveExample("pages/js/array-slice.html", "taller")}}++## Синтаксис++```js+slice()+slice(start)+slice(start, end)+```++### Параметри++- `start` {{optional_inline}}++  - : Порядковий номер елемента (починаючи з нуля), з якого починається витягання.++    Допускається застосовувати від'ємний індекс для позначення позиції з кінця послідовності. Наприклад, `slice(-2)` витягує останні два елементи з масиву.++    Якщо `start` не заданий, `slice` почне з позиції `0`.++    Якщо `start` більший за довжину послідовності, буде повернуто порожній масив.++- `end` {{optional_inline}}++  - : Порядковий номер елемента (починаючи з нуля), _перед_ яким буде припинено вибирання елементів. `slice` витягає елементи до, але не включаючи `end`. Наприклад, `slice(1,4)` витягне елементи з другого по четвертий (елементи з позицій 1, 2, та 3).++    Допускається застосовувати від'ємний індекс для позначення положення елемента з кінця послідовності. Наприклад, `slice(2,-1)` витягне елементи, починаючи з третього, і закінчуючи другим від кінця масиву.++    Якщо `end` опущено, `slice` витягне всі елементи до кінця послідовності (`arr.length`).++    Якщо `end` більший за довжину послідовності, `slice` витягне всі елементи до кінця набору (`arr.length`).++### Результат++Новий масив, що містить всі витягнуті елементи.++## Опис++Метод `slice` не змінює початковий масив. Він повертає поверхневу копію елементів початкового масиву. Елементи початкового масиву копіюються до масиву з результатами таким чином:++- Для об'єктів `slice` копіює посилання на об'єкти у новий масив. Як початковий, так і новий масив міститимуть посилання на один і той самий об'єкт. Якщо об'єкт змінюється, ці зміни буде видно як у початковому, так і в новому масиві.+- Для рядків, чисел, і булевого типу (не об'єктів {{jsxref("String")}}, {{jsxref("Number")}} чи {{jsxref("Boolean")}}), `slice` скопіює значення у новий масив. Зміни у рядках, числах, чи булевих значеннях одного масиву ніяк не зачеплять інший.++Якщо до будь-якого з масивів додати новий елемент, інший масив залишиться без змін.++## Приклади++### Повернення частини наявного масиву++```js+let fruits = ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']+let citrus = fruits.slice(1, 3)++// fruits містить ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']+// citrus містить ['Orange','Lemon']+```++### Застосування функції зрізу++В цьому прикладі `slice` створює новий масив `newCar` з `myCar`. Обидва містять посилання на об'єкт `myHonda`. Коли колір `myHonda` змінюється на `purple`, обидва масиви показують цю зміну.++```js+// За допомогою функції зрізу створити newCar з myCar.+let myHonda = { color: 'red', wheels: 4, engine: { cylinders: 4, size: 2.2 } }+let myCar = [myHonda, 2, 'cherry condition', 'purchased 1997']+let newCar = myCar.slice(0, 2)++// Показати значення myCar, newCar, і колір myHonda,+// на який посилаються обидва масиви.+console.log('myCar = ' + JSON.stringify(myCar))+console.log('newCar = ' + JSON.stringify(newCar))+console.log('myCar[0].color = ' + myCar[0].color)+console.log('newCar[0].color = ' + newCar[0].color)++// Змінити колір myHonda.+myHonda.color = 'purple'+console.log('The new color of my Honda is ' + myHonda.color)++// Показати колір myHonda, на який посилаються обидва масиви.+console.log('myCar[0].color = ' + myCar[0].color)+console.log('newCar[0].color = ' + newCar[0].color)+```++Скрипт надрукує такий текст:++```js+myCar = [{color: 'red', wheels: 4, engine: {cylinders: 4, size: 2.2}}, 2,+         'cherry condition', 'purchased 1997']+newCar = [{color: 'red', wheels: 4, engine: {cylinders: 4, size: 2.2}}, 2]+myCar[0].color = red+newCar[0].color = red+The new color of my Honda is purple+myCar[0].color = purple+newCar[0].color = purple+```++### Об'єкти, подібні до масиву

Масивоподібні об'єкти?

AdriandeCita

comment created time in 17 days

Pull request review commentwebdoky/content

translate reference page for Array.slice() method

+---+title: Array.prototype.slice()+slug: Web/JavaScript/Reference/Global_Objects/Array/slice+tags:+  - Array+  - JavaScript+  - Method+  - Prototype+  - Reference+browser-compat: javascript.builtins.Array.slice+---+{{JSRef}}++Метод **`slice()`** повертає поверхневу копію (зріз) певної частини масиву, взяту від позиції `start` до `end` (не включно з `end`), у вигляді нового об'єкту масиву. Значення `start` та `end` означають індекси елементів цього масиву. Початковий масив не змінюється.++{{EmbedInteractiveExample("pages/js/array-slice.html", "taller")}}++## Синтаксис++```js+slice()+slice(start)+slice(start, end)+```++### Параметри++- `start` {{optional_inline}}++  - : Порядковий номер елемента (починаючи з нуля), з якого починається витягання.++    Допускається застосовувати від'ємний індекс для позначення позиції з кінця послідовності. Наприклад, `slice(-2)` витягує останні два елементи з масиву.++    Якщо `start` не заданий, `slice` почне з позиції `0`.++    Якщо `start` більший за довжину послідовності, буде повернуто порожній масив.++- `end` {{optional_inline}}++  - : Порядковий номер елемента (починаючи з нуля), _перед_ яким буде припинено вибирання елементів. `slice` витягає елементи до, але не включаючи `end`. Наприклад, `slice(1,4)` витягне елементи з другого по четвертий (елементи з позицій 1, 2, та 3).

з цим не включаючи теж би зробити, як з попереднім

AdriandeCita

comment created time in 17 days

Pull request review commentwebdoky/content

translate reference page for Array.slice() method

+---+title: Array.prototype.slice()+slug: Web/JavaScript/Reference/Global_Objects/Array/slice+tags:+  - Array+  - JavaScript+  - Method+  - Prototype+  - Reference+browser-compat: javascript.builtins.Array.slice+---+{{JSRef}}++Метод **`slice()`** повертає поверхневу копію (зріз) певної частини масиву, взяту від позиції `start` до `end` (не включно з `end`), у вигляді нового об'єкту масиву. Значення `start` та `end` означають індекси елементів цього масиву. Початковий масив не змінюється.++{{EmbedInteractiveExample("pages/js/array-slice.html", "taller")}}++## Синтаксис++```js+slice()+slice(start)+slice(start, end)+```++### Параметри++- `start` {{optional_inline}}++  - : Порядковий номер елемента (починаючи з нуля), з якого починається витягання.++    Допускається застосовувати від'ємний індекс для позначення позиції з кінця послідовності. Наприклад, `slice(-2)` витягує останні два елементи з масиву.++    Якщо `start` не заданий, `slice` почне з позиції `0`.++    Якщо `start` більший за довжину послідовності, буде повернуто порожній масив.++- `end` {{optional_inline}}++  - : Порядковий номер елемента (починаючи з нуля), _перед_ яким буде припинено вибирання елементів. `slice` витягає елементи до, але не включаючи `end`. Наприклад, `slice(1,4)` витягне елементи з другого по четвертий (елементи з позицій 1, 2, та 3).++    Допускається застосовувати від'ємний індекс для позначення положення елемента з кінця послідовності. Наприклад, `slice(2,-1)` витягне елементи, починаючи з третього, і закінчуючи другим від кінця масиву.++    Якщо `end` опущено, `slice` витягне всі елементи до кінця послідовності (`arr.length`).++    Якщо `end` більший за довжину послідовності, `slice` витягне всі елементи до кінця набору (`arr.length`).++### Результат++Новий масив, що містить всі витягнуті елементи.++## Опис++Метод `slice` не змінює початковий масив. Він повертає поверхневу копію елементів початкового масиву. Елементи початкового масиву копіюються до масиву з результатами таким чином:++- Для об'єктів `slice` копіює посилання на об'єкти у новий масив. Як початковий, так і новий масив міститимуть посилання на один і той самий об'єкт. Якщо об'єкт змінюється, ці зміни буде видно як у початковому, так і в новому масиві.+- Для рядків, чисел, і булевого типу (не об'єктів {{jsxref("String")}}, {{jsxref("Number")}} чи {{jsxref("Boolean")}}), `slice` скопіює значення у новий масив. Зміни у рядках, числах, чи булевих значеннях одного масиву ніяк не зачеплять інший.++Якщо до будь-якого з масивів додати новий елемент, інший масив залишиться без змін.++## Приклади++### Повернення частини наявного масиву++```js+let fruits = ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']+let citrus = fruits.slice(1, 3)++// fruits містить ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']+// citrus містить ['Orange','Lemon']+```++### Застосування функції зрізу++В цьому прикладі `slice` створює новий масив `newCar` з `myCar`. Обидва містять посилання на об'єкт `myHonda`. Коли колір `myHonda` змінюється на `purple`, обидва масиви показують цю зміну.++```js+// За допомогою функції зрізу створити newCar з myCar.+let myHonda = { color: 'red', wheels: 4, engine: { cylinders: 4, size: 2.2 } }+let myCar = [myHonda, 2, 'cherry condition', 'purchased 1997']+let newCar = myCar.slice(0, 2)++// Показати значення myCar, newCar, і колір myHonda,+// на який посилаються обидва масиви.+console.log('myCar = ' + JSON.stringify(myCar))+console.log('newCar = ' + JSON.stringify(newCar))+console.log('myCar[0].color = ' + myCar[0].color)+console.log('newCar[0].color = ' + newCar[0].color)++// Змінити колір myHonda.+myHonda.color = 'purple'+console.log('The new color of my Honda is ' + myHonda.color)++// Показати колір myHonda, на який посилаються обидва масиви.+console.log('myCar[0].color = ' + myCar[0].color)+console.log('newCar[0].color = ' + newCar[0].color)+```++Скрипт надрукує такий текст:++```js+myCar = [{color: 'red', wheels: 4, engine: {cylinders: 4, size: 2.2}}, 2,+         'cherry condition', 'purchased 1997']+newCar = [{color: 'red', wheels: 4, engine: {cylinders: 4, size: 2.2}}, 2]+myCar[0].color = red+newCar[0].color = red+The new color of my Honda is purple+myCar[0].color = purple+newCar[0].color = purple+```++### Об'єкти, подібні до масиву++За допомогою методу `slice` можна також перетворити масивоподібний об'єкт чи колекцію у новий масив. Потрібно лише прив'язати цей метод до об'єкта. Зокрема, об'єкт {{jsxref("Functions/arguments", "arguments")}} в функції є прикладом такого 'масивоподібного об'єкту'.

прив'язати у статті має посилання. «масивоподібного об'єкту»

AdriandeCita

comment created time in 17 days

Pull request review commentwebdoky/content

translate reference page for Array.slice() method

+---+title: Array.prototype.slice()+slug: Web/JavaScript/Reference/Global_Objects/Array/slice+tags:+  - Array+  - JavaScript+  - Method+  - Prototype+  - Reference+browser-compat: javascript.builtins.Array.slice+---+{{JSRef}}++Метод **`slice()`** повертає поверхневу копію (зріз) певної частини масиву, взяту від позиції `start` до `end` (не включно з `end`), у вигляді нового об'єкту масиву. Значення `start` та `end` означають індекси елементів цього масиву. Початковий масив не змінюється.

не включно з end —» end не включено —» без end або свій який варіант, бо трохи незграбно

AdriandeCita

comment created time in 17 days

Pull request review commentwebdoky/content

translate reference page for Array.slice() method

+---+title: Array.prototype.slice()+slug: Web/JavaScript/Reference/Global_Objects/Array/slice+tags:+  - Array+  - JavaScript+  - Method+  - Prototype+  - Reference+browser-compat: javascript.builtins.Array.slice+---+{{JSRef}}++Метод **`slice()`** повертає поверхневу копію (зріз) певної частини масиву, взяту від позиції `start` до `end` (не включно з `end`), у вигляді нового об'єкту масиву. Значення `start` та `end` означають індекси елементів цього масиву. Початковий масив не змінюється.++{{EmbedInteractiveExample("pages/js/array-slice.html", "taller")}}++## Синтаксис++```js+slice()+slice(start)+slice(start, end)+```++### Параметри++- `start` {{optional_inline}}++  - : Порядковий номер елемента (починаючи з нуля), з якого починається витягання.++    Допускається застосовувати від'ємний індекс для позначення позиції з кінця послідовності. Наприклад, `slice(-2)` витягує останні два елементи з масиву.++    Якщо `start` не заданий, `slice` почне з позиції `0`.++    Якщо `start` більший за довжину послідовності, буде повернуто порожній масив.++- `end` {{optional_inline}}++  - : Порядковий номер елемента (починаючи з нуля), _перед_ яким буде припинено вибирання елементів. `slice` витягає елементи до, але не включаючи `end`. Наприклад, `slice(1,4)` витягне елементи з другого по четвертий (елементи з позицій 1, 2, та 3).++    Допускається застосовувати від'ємний індекс для позначення положення елемента з кінця послідовності. Наприклад, `slice(2,-1)` витягне елементи, починаючи з третього, і закінчуючи другим від кінця масиву.++    Якщо `end` опущено, `slice` витягне всі елементи до кінця послідовності (`arr.length`).++    Якщо `end` більший за довжину послідовності, `slice` витягне всі елементи до кінця набору (`arr.length`).++### Результат++Новий масив, що містить всі витягнуті елементи.++## Опис++Метод `slice` не змінює початковий масив. Він повертає поверхневу копію елементів початкового масиву. Елементи початкового масиву копіюються до масиву з результатами таким чином:++- Для об'єктів `slice` копіює посилання на об'єкти у новий масив. Як початковий, так і новий масив міститимуть посилання на один і той самий об'єкт. Якщо об'єкт змінюється, ці зміни буде видно як у початковому, так і в новому масиві.+- Для рядків, чисел, і булевого типу (не об'єктів {{jsxref("String")}}, {{jsxref("Number")}} чи {{jsxref("Boolean")}}), `slice` скопіює значення у новий масив. Зміни у рядках, числах, чи булевих значеннях одного масиву ніяк не зачеплять інший.++Якщо до будь-якого з масивів додати новий елемент, інший масив залишиться без змін.++## Приклади++### Повернення частини наявного масиву++```js+let fruits = ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']+let citrus = fruits.slice(1, 3)++// fruits містить ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']+// citrus містить ['Orange','Lemon']+```++### Застосування функції зрізу++В цьому прикладі `slice` створює новий масив `newCar` з `myCar`. Обидва містять посилання на об'єкт `myHonda`. Коли колір `myHonda` змінюється на `purple`, обидва масиви показують цю зміну.++```js+// За допомогою функції зрізу створити newCar з myCar.

Тут slice я б теж не чіпав

AdriandeCita

comment created time in 17 days

Pull request review commentwebdoky/content

translate reference page for Array.slice() method

+---+title: Array.prototype.slice()+slug: Web/JavaScript/Reference/Global_Objects/Array/slice+tags:+  - Array+  - JavaScript+  - Method+  - Prototype+  - Reference+browser-compat: javascript.builtins.Array.slice+---+{{JSRef}}++Метод **`slice()`** повертає поверхневу копію (зріз) певної частини масиву, взяту від позиції `start` до `end` (не включно з `end`), у вигляді нового об'єкту масиву. Значення `start` та `end` означають індекси елементів цього масиву. Початковий масив не змінюється.++{{EmbedInteractiveExample("pages/js/array-slice.html", "taller")}}++## Синтаксис++```js+slice()+slice(start)+slice(start, end)+```++### Параметри++- `start` {{optional_inline}}++  - : Порядковий номер елемента (починаючи з нуля), з якого починається витягання.++    Допускається застосовувати від'ємний індекс для позначення позиції з кінця послідовності. Наприклад, `slice(-2)` витягує останні два елементи з масиву.++    Якщо `start` не заданий, `slice` почне з позиції `0`.++    Якщо `start` більший за довжину послідовності, буде повернуто порожній масив.++- `end` {{optional_inline}}++  - : Порядковий номер елемента (починаючи з нуля), _перед_ яким буде припинено вибирання елементів. `slice` витягає елементи до, але не включаючи `end`. Наприклад, `slice(1,4)` витягне елементи з другого по четвертий (елементи з позицій 1, 2, та 3).++    Допускається застосовувати від'ємний індекс для позначення положення елемента з кінця послідовності. Наприклад, `slice(2,-1)` витягне елементи, починаючи з третього, і закінчуючи другим від кінця масиву.++    Якщо `end` опущено, `slice` витягне всі елементи до кінця послідовності (`arr.length`).++    Якщо `end` більший за довжину послідовності, `slice` витягне всі елементи до кінця набору (`arr.length`).++### Результат++Новий масив, що містить всі витягнуті елементи.++## Опис++Метод `slice` не змінює початковий масив. Він повертає поверхневу копію елементів початкового масиву. Елементи початкового масиву копіюються до масиву з результатами таким чином:++- Для об'єктів `slice` копіює посилання на об'єкти у новий масив. Як початковий, так і новий масив міститимуть посилання на один і той самий об'єкт. Якщо об'єкт змінюється, ці зміни буде видно як у початковому, так і в новому масиві.+- Для рядків, чисел, і булевого типу (не об'єктів {{jsxref("String")}}, {{jsxref("Number")}} чи {{jsxref("Boolean")}}), `slice` скопіює значення у новий масив. Зміни у рядках, числах, чи булевих значеннях одного масиву ніяк не зачеплять інший.++Якщо до будь-якого з масивів додати новий елемент, інший масив залишиться без змін.++## Приклади++### Повернення частини наявного масиву++```js+let fruits = ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']+let citrus = fruits.slice(1, 3)++// fruits містить ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']+// citrus містить ['Orange','Lemon']+```++### Застосування функції зрізу

Тут краще залишити slice

AdriandeCita

comment created time in 17 days

Pull request review commentwebdoky/content

translate reference page for Array.slice() method

+---+title: Array.prototype.slice()+slug: Web/JavaScript/Reference/Global_Objects/Array/slice+tags:+  - Array+  - JavaScript+  - Method+  - Prototype+  - Reference+browser-compat: javascript.builtins.Array.slice+---+{{JSRef}}++Метод **`slice()`** повертає поверхневу копію (зріз) певної частини масиву, взяту від позиції `start` до `end` (не включно з `end`), у вигляді нового об'єкту масиву. Значення `start` та `end` означають індекси елементів цього масиву. Початковий масив не змінюється.++{{EmbedInteractiveExample("pages/js/array-slice.html", "taller")}}++## Синтаксис++```js+slice()+slice(start)+slice(start, end)+```++### Параметри++- `start` {{optional_inline}}++  - : Порядковий номер елемента (починаючи з нуля), з якого починається витягання.++    Допускається застосовувати від'ємний індекс для позначення позиції з кінця послідовності. Наприклад, `slice(-2)` витягує останні два елементи з масиву.++    Якщо `start` не заданий, `slice` почне з позиції `0`.++    Якщо `start` більший за довжину послідовності, буде повернуто порожній масив.++- `end` {{optional_inline}}++  - : Порядковий номер елемента (починаючи з нуля), _перед_ яким буде припинено вибирання елементів. `slice` витягає елементи до, але не включаючи `end`. Наприклад, `slice(1,4)` витягне елементи з другого по четвертий (елементи з позицій 1, 2, та 3).++    Допускається застосовувати від'ємний індекс для позначення положення елемента з кінця послідовності. Наприклад, `slice(2,-1)` витягне елементи, починаючи з третього, і закінчуючи другим від кінця масиву.++    Якщо `end` опущено, `slice` витягне всі елементи до кінця послідовності (`arr.length`).++    Якщо `end` більший за довжину послідовності, `slice` витягне всі елементи до кінця набору (`arr.length`).++### Результат++Новий масив, що містить всі витягнуті елементи.++## Опис++Метод `slice` не змінює початковий масив. Він повертає поверхневу копію елементів початкового масиву. Елементи початкового масиву копіюються до масиву з результатами таким чином:++- Для об'єктів `slice` копіює посилання на об'єкти у новий масив. Як початковий, так і новий масив міститимуть посилання на один і той самий об'єкт. Якщо об'єкт змінюється, ці зміни буде видно як у початковому, так і в новому масиві.

масиві —» масивах

AdriandeCita

comment created time in 17 days

PullRequestReviewEvent