From 74604bfbacdb6f32fb2da0387924b371692775ca Mon Sep 17 00:00:00 2001 From: Maksym1910 Date: Sun, 14 Nov 2021 16:44:25 +0200 Subject: [PATCH 1/5] translation(js): docs/Web/Javascript/Reference/Global_Objects/Array/indexOf --- .../global_objects/array/indexof/index.md | 204 ++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100644 files/uk/web/javascript/reference/global_objects/array/indexof/index.md diff --git a/files/uk/web/javascript/reference/global_objects/array/indexof/index.md b/files/uk/web/javascript/reference/global_objects/array/indexof/index.md new file mode 100644 index 0000000000..5e442fab68 --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/array/indexof/index.md @@ -0,0 +1,204 @@ +--- +title: Array.prototype.indexOf() +slug: Web/JavaScript/Reference/Global_Objects/Array/indexOf +tags: + - Array + - JavaScript + - Method + - Prototype + - Reference + - indexof + - Polyfill +browser-compat: javascript.builtins.Array.indexOf +--- +{{JSRef}} + +Метод **`indexOf()`** повертає перший індекс, за яким даний елемент можна знайти в масиві або -1, якщо його немає + +{{EmbedInteractiveExample("pages/js/array-indexof.html")}} + +## Синтаксис + +```js +indexOf(searchElement) +indexOf(searchElement, fromIndex) +``` + +### Параметри + +- `searchElement` + - : Шуканий елемент у масиві. +- `fromIndex` {{optional_inline}} + - : Індекс, з якого потрібно почати пошук. Якщо індекс більший або дорівнює довжині масиву, повертається -1, це означає, що пошук у масиві виконуватись не буде. Якщо надане значення індексу є від’ємним числом, воно приймається як зміщення від кінця масиву. Примітка: якщо наданий індекс є від’ємним, пошук у масиві все одно виконується спереду назад. Якщо наданий індекс дорівнює 0, пошук буде здійснюватися в усьому масиві. Усталено: 0 (шукається весь масив). + +### Значення, що повертається + +Перший індекс елемента в масиві; **-1**, якщо не знайдено. + +## Опис + +`indexOf()` порівнює `searchElement` з елементами масиву, використовуючи [строгу рівність](/uk/docs/Web/JavaScript/Reference/Operators/Strict_equality) (той самий метод, що використовується оператором === або потрійної рівності). + +> **Примітка:** Для методу String див. +> {{jsxref("String.prototype.indexOf()")}}. + +## Приклади + +### Використання indexOf() + +У наступному прикладі `indexOf()` використовується для пошуку значень у масиві. + +```js +var array = [2, 9, 9]; +array.indexOf(2); // 0 +array.indexOf(7); // -1 +array.indexOf(9, 2); // 2 +array.indexOf(2, -1); // -1 +array.indexOf(2, -3); // 0 +``` + +### Пошук усіх входжень елемента + +```js +var indices = []; +var array = ['a', 'b', 'a', 'c', 'a', 'd']; +var element = 'a'; +var idx = array.indexOf(element); +while (idx != -1) { + indices.push(idx); + idx = array.indexOf(element, idx + 1); +} +console.log(indices); +// [0, 2, 4] +``` + +### Визначення, чи існує елемент у масиві чи ні, та оновлення масиву + +```js +function updateVegetablesCollection (veggies, veggie) { + if (veggies.indexOf(veggie) === -1) { + veggies.push(veggie); + console.log('New veggies collection is : ' + veggies); + } else if (veggies.indexOf(veggie) > -1) { + console.log(veggie + ' already exists in the veggies collection.'); + } +} + +var veggies = ['potato', 'tomato', 'chillies', 'green-pepper']; + +updateVegetablesCollection(veggies, 'spinach'); +// Нова veggies колекція: potato,tomato,chillies,green-pepper,spinach +updateVegetablesCollection(veggies, 'spinach'); +// spinach вже є в колекції veggies. +``` + +## Поліфіл + +`indexOf()` було додано до стандарту ECMA-262 у 5-му виданні; тому він може бути присутнім не у всіх браузерах. Ви можете обійти це, використовуючи наведений нижче код на початку ваших скриптів. Це дозволить вам використовувати `indexOf()`, коли ще немає вбудованої підтримки. Цей алгоритм відповідає алгоритму, зазначеному в ECMA-262, 5-те видання, припускаючи, що {{jsxref("Global_Objects/TypeError", + "TypeError")}} та {{jsxref("Math.abs()")}} мають свої первісні значення. + +```js +// Ця версія намагається оптимізувати, лише перевіряючи "in" під час пошуку undefined і +// пропускаючи безумовно безрезультатний пошук NaN. Інші частини – це лише косметична лаконічність. +// Чи це насправді швидше, ще невідомо. +if (!Array.prototype.indexOf) + Array.prototype.indexOf = (function(Object, max, min) { + "use strict" + return function indexOf(member, fromIndex) { + if (this === null || this === undefined) + throw TypeError("Array.prototype.indexOf called on null or undefined") + + var that = Object(this), Len = that.length >>> 0, i = min(fromIndex | 0, Len) + if (i < 0) i = max(0, Len + i) + else if (i >= Len) return -1 + + if (member === void 0) { // undefined + for (; i !== Len; ++i) if (that[i] === void 0 && i in that) return i + } else if (member !== member) { // NaN + return -1 // Оскільки NaN !== NaN, він ніколи не буде знайдений. Швидкий шлях. + } else // все інше + for (; i !== Len; ++i) if (that[i] === member) return i + + return -1 // якщо значення не знайдено, то повертаємо -1 + } + })(Object, Math.max, Math.min) +``` + +Однак, якщо вас більше цікавлять усі дрібні технічні деталі, визначені стандартом ECMA, і вас менше турбують продуктивність або стислість, цей більш описовий поліфіл може виявитися кориснішим. + +```js +// Етапи розробки ECMA-262, видання 5, 15.4.4.14 +// Довідка: https://es5.github.io/#x15.4.4.14 +if (!Array.prototype.indexOf) { + Array.prototype.indexOf = function(searchElement, fromIndex) { + "use strict"; + var k; + + // 1. Нехай o буде результатом виклику ToObject, передаючи + // значення this як аргумент. + if (this == null) { + throw new TypeError('"this" is null or not defined'); + } + + var o = Object(this); + + // 2. Нехай lenValue буде результатом виклику внутрішнього методу Get + // для o з аргументом "length". + // 3. Нехай len буде ToUint32(lenValue). + var len = o.length >>> 0; + + // 4. Якщо len дорівнює 0, повернути -1. + if (len === 0) { + return -1; + } + + // 5. Якщо передано аргумент fromIndex, нехай n буде + // ToInteger(fromIndex); інакше нехай n дорівнює 0. + var n = fromIndex | 0; + + // 6. Якщо n >= len, повернути -1. + if (n >= len) { + return -1; + } + + // 7. Якщо n >= 0, тоді нехай k буде n. + // 8. Інакше, n<0, нехай k буде len - abs(n). + // Якщо k менше 0, то нехай k дорівнює 0. + k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); + + // 9. Повторювати, поки k < len + for (; k < len; k++) { + // a. Нехай Pk буде ToString(k). + // Це неявно для операндів LHS оператора in + // b. Нехай kPresent буде результатом виклику + // внутрішнього методу HasProperty для o з аргументом Pk. + // Цей крок можна поєднати з c + // c. Якщо kPresent - вірно, то + // i. Нехай elementK буде результатом виклику + // внутрішнього методу Get для o з аргументом ToString(k). + // ii. Нехай те саме буде результатом застосування + // Алгоритму Строгого Порівняння до + // searchElement і elementK. + // iii. Якщо те саме вірно, повернути k. + if (k in o && o[k] === searchElement) + return k; + } + return -1; + }; +} +``` + +## Технічні характеристики + +{{Specifications}} + +## Сумісність з браузером + +{{Compat}} + +## Дивись також + +- Поліфіл `Array.prototype.indexOf` доступний в [`core-js`](https://github.com/zloirock/core-js#ecmascript-array) +- {{jsxref("Array.prototype.lastIndexOf()")}} +- {{jsxref("TypedArray.prototype.indexOf()")}} +- {{jsxref("String.prototype.indexOf()")}} From 4fd1c9afc93c19149aeb8ff56c7fee265f7e43b3 Mon Sep 17 00:00:00 2001 From: Maksym1910 Date: Sun, 14 Nov 2021 16:59:25 +0200 Subject: [PATCH 2/5] translation(js): self review fixes --- .../reference/global_objects/array/indexof/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/files/uk/web/javascript/reference/global_objects/array/indexof/index.md b/files/uk/web/javascript/reference/global_objects/array/indexof/index.md index 5e442fab68..8f9a529a4d 100644 --- a/files/uk/web/javascript/reference/global_objects/array/indexof/index.md +++ b/files/uk/web/javascript/reference/global_objects/array/indexof/index.md @@ -13,7 +13,7 @@ browser-compat: javascript.builtins.Array.indexOf --- {{JSRef}} -Метод **`indexOf()`** повертає перший індекс, за яким даний елемент можна знайти в масиві або -1, якщо його немає +Метод **`indexOf()`** повертає перший індекс, за яким даний елемент можна знайти в масиві або -1, якщо його немає. {{EmbedInteractiveExample("pages/js/array-indexof.html")}} @@ -29,7 +29,7 @@ indexOf(searchElement, fromIndex) - `searchElement` - : Шуканий елемент у масиві. - `fromIndex` {{optional_inline}} - - : Індекс, з якого потрібно почати пошук. Якщо індекс більший або дорівнює довжині масиву, повертається -1, це означає, що пошук у масиві виконуватись не буде. Якщо надане значення індексу є від’ємним числом, воно приймається як зміщення від кінця масиву. Примітка: якщо наданий індекс є від’ємним, пошук у масиві все одно виконується спереду назад. Якщо наданий індекс дорівнює 0, пошук буде здійснюватися в усьому масиві. Усталено: 0 (шукається весь масив). + - : Індекс, з якого потрібно почати пошук. Якщо індекс більший або дорівнює довжині масиву, повертається -1, це означає, що пошук у масиві виконуватись не буде. Якщо надане значення індексу є від’ємним числом, воно приймається як зміщення від кінця масиву. Примітка: якщо наданий індекс є від’ємним, пошук у масиві все одно виконується спереду назад. Якщо наданий індекс дорівнює 0, пошук буде здійснюватися в усьому масиві. Усталено: 0 (шукається весь масив). ### Значення, що повертається From 011a931bfc66827e82763af8d36192f1ac0fec40 Mon Sep 17 00:00:00 2001 From: Maksym1910 Date: Sun, 21 Nov 2021 15:25:03 +0200 Subject: [PATCH 3/5] translation(js): review fixes --- .../global_objects/array/indexof/index.md | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/files/uk/web/javascript/reference/global_objects/array/indexof/index.md b/files/uk/web/javascript/reference/global_objects/array/indexof/index.md index 8f9a529a4d..05038a7b7f 100644 --- a/files/uk/web/javascript/reference/global_objects/array/indexof/index.md +++ b/files/uk/web/javascript/reference/global_objects/array/indexof/index.md @@ -13,7 +13,7 @@ browser-compat: javascript.builtins.Array.indexOf --- {{JSRef}} -Метод **`indexOf()`** повертає перший індекс, за яким даний елемент можна знайти в масиві або -1, якщо його немає. +Метод **`indexOf()`** повертає перший індекс, за яким даний елемент можна знайти в масиві, або -1 - якщо його немає. {{EmbedInteractiveExample("pages/js/array-indexof.html")}} @@ -29,11 +29,11 @@ indexOf(searchElement, fromIndex) - `searchElement` - : Шуканий елемент у масиві. - `fromIndex` {{optional_inline}} - - : Індекс, з якого потрібно почати пошук. Якщо індекс більший або дорівнює довжині масиву, повертається -1, це означає, що пошук у масиві виконуватись не буде. Якщо надане значення індексу є від’ємним числом, воно приймається як зміщення від кінця масиву. Примітка: якщо наданий індекс є від’ємним, пошук у масиві все одно виконується спереду назад. Якщо наданий індекс дорівнює 0, пошук буде здійснюватися в усьому масиві. Усталено: 0 (шукається весь масив). + - : Індекс, з якого потрібно почати пошук. Якщо індекс більший або дорівнює довжині масиву, повертається -1 - це означає, що пошук у масиві виконуватись не буде. Якщо надане значення індексу є від’ємним числом, воно приймається як зміщення від кінця масиву. Примітка: якщо наданий індекс є від’ємним, пошук у масиві все одно виконується спереду назад. Якщо наданий індекс дорівнює 0, пошук буде здійснюватися в усьому масиві. Усталено: 0 (перевіряється весь масив). -### Значення, що повертається +### Повернене значення -Перший індекс елемента в масиві; **-1**, якщо не знайдено. +Перший індекс елемента в масиві; **-1**, якщо нічого не знайдено. ## Опис @@ -72,7 +72,7 @@ console.log(indices); // [0, 2, 4] ``` -### Визначення, чи існує елемент у масиві чи ні, та оновлення масиву +### Визначення, чи знаходиться елемент у масиві, чи ні, та оновлення масиву ```js function updateVegetablesCollection (veggies, veggie) { @@ -87,18 +87,18 @@ function updateVegetablesCollection (veggies, veggie) { var veggies = ['potato', 'tomato', 'chillies', 'green-pepper']; updateVegetablesCollection(veggies, 'spinach'); -// Нова veggies колекція: potato,tomato,chillies,green-pepper,spinach +// Нова колекція veggies: potato,tomato,chillies,green-pepper,spinach updateVegetablesCollection(veggies, 'spinach'); // spinach вже є в колекції veggies. ``` ## Поліфіл -`indexOf()` було додано до стандарту ECMA-262 у 5-му виданні; тому він може бути присутнім не у всіх браузерах. Ви можете обійти це, використовуючи наведений нижче код на початку ваших скриптів. Це дозволить вам використовувати `indexOf()`, коли ще немає вбудованої підтримки. Цей алгоритм відповідає алгоритму, зазначеному в ECMA-262, 5-те видання, припускаючи, що {{jsxref("Global_Objects/TypeError", +`indexOf()` було додано до стандарту ECMA-262 у 5-му виданні, тому він може бути присутнім не у всіх браузерах. Можна це обійти, використовуючи наведений нижче код на початку ваших скриптів. Це дозволить використовувати `indexOf()`, навіть якщо вбудована підтримка відсутня. Цей алгоритм відповідає алгоритму, зазначеному в ECMA-262, 5-те видання, за умови, що {{jsxref("Global_Objects/TypeError", "TypeError")}} та {{jsxref("Math.abs()")}} мають свої первісні значення. ```js -// Ця версія намагається оптимізувати, лише перевіряючи "in" під час пошуку undefined і +// Ця версія намагається оптимізуватися, перевіряючи "in" лише під час пошуку undefined, і // пропускаючи безумовно безрезультатний пошук NaN. Інші частини – це лише косметична лаконічність. // Чи це насправді швидше, ще невідомо. if (!Array.prototype.indexOf) @@ -124,7 +124,7 @@ if (!Array.prototype.indexOf) })(Object, Math.max, Math.min) ``` -Однак, якщо вас більше цікавлять усі дрібні технічні деталі, визначені стандартом ECMA, і вас менше турбують продуктивність або стислість, цей більш описовий поліфіл може виявитися кориснішим. +Однак, якщо вас більше цікавлять усі дрібні технічні деталі, визначені стандартом ECMA, і менше турбують продуктивність або стислість, цей краще документований поліфіл може виявитися кориснішим. ```js // Етапи розробки ECMA-262, видання 5, 15.4.4.14 @@ -169,11 +169,11 @@ if (!Array.prototype.indexOf) { // 9. Повторювати, поки k < len for (; k < len; k++) { // a. Нехай Pk буде ToString(k). - // Це неявно для операндів LHS оператора in + // Це неявно для операндів лівої сторони оператора in // b. Нехай kPresent буде результатом виклику // внутрішнього методу HasProperty для o з аргументом Pk. // Цей крок можна поєднати з c - // c. Якщо kPresent - вірно, то + // c. Якщо значеня kPresent - істинне, то // i. Нехай elementK буде результатом виклику // внутрішнього методу Get для o з аргументом ToString(k). // ii. Нехай те саме буде результатом застосування @@ -188,15 +188,15 @@ if (!Array.prototype.indexOf) { } ``` -## Технічні характеристики +## Специфікації {{Specifications}} -## Сумісність з браузером +## Сумісність з браузерами {{Compat}} -## Дивись також +## Дивіться також - Поліфіл `Array.prototype.indexOf` доступний в [`core-js`](https://github.com/zloirock/core-js#ecmascript-array) - {{jsxref("Array.prototype.lastIndexOf()")}} From ef17a2efc2ed49ea9eabfa8b1ecc7632d0b248c0 Mon Sep 17 00:00:00 2001 From: Maksym1910 Date: Tue, 30 Nov 2021 16:47:17 +0200 Subject: [PATCH 4/5] translation(js): review fixes --- .../global_objects/array/indexof/index.md | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/files/uk/web/javascript/reference/global_objects/array/indexof/index.md b/files/uk/web/javascript/reference/global_objects/array/indexof/index.md index 05038a7b7f..de1f47f374 100644 --- a/files/uk/web/javascript/reference/global_objects/array/indexof/index.md +++ b/files/uk/web/javascript/reference/global_objects/array/indexof/index.md @@ -13,7 +13,7 @@ browser-compat: javascript.builtins.Array.indexOf --- {{JSRef}} -Метод **`indexOf()`** повертає перший індекс, за яким даний елемент можна знайти в масиві, або -1 - якщо його немає. +Метод **`indexOf()`** повертає перший індекс, за яким даний елемент можна знайти в масиві, або -1 — якщо його немає. {{EmbedInteractiveExample("pages/js/array-indexof.html")}} @@ -29,7 +29,7 @@ indexOf(searchElement, fromIndex) - `searchElement` - : Шуканий елемент у масиві. - `fromIndex` {{optional_inline}} - - : Індекс, з якого потрібно почати пошук. Якщо індекс більший або дорівнює довжині масиву, повертається -1 - це означає, що пошук у масиві виконуватись не буде. Якщо надане значення індексу є від’ємним числом, воно приймається як зміщення від кінця масиву. Примітка: якщо наданий індекс є від’ємним, пошук у масиві все одно виконується спереду назад. Якщо наданий індекс дорівнює 0, пошук буде здійснюватися в усьому масиві. Усталено: 0 (перевіряється весь масив). + - : Індекс, з якого потрібно почати пошук. Якщо індекс більший або дорівнює довжині масиву, повертається -1: це означає, що пошук у масиві виконуватись не буде. Якщо надане значення індексу є від’ємним числом, то воно приймається як зміщення від кінця масиву. Примітка: якщо наданий індекс є від’ємним, то пошук у масиві все одно виконується від початку до кінця. Якщо наданий індекс дорівнює 0 — пошук буде здійснюватися в усьому масиві. Усталено: 0 (перевіряється весь масив). ### Повернене значення @@ -37,7 +37,7 @@ indexOf(searchElement, fromIndex) ## Опис -`indexOf()` порівнює `searchElement` з елементами масиву, використовуючи [строгу рівність](/uk/docs/Web/JavaScript/Reference/Operators/Strict_equality) (той самий метод, що використовується оператором === або потрійної рівності). +`indexOf()` порівнює `searchElement` з елементами масиву, використовуючи [строгу рівність](/uk/docs/Web/JavaScript/Reference/Operators/Strict_equality) (той самий метод, що використовується оператором потрійної рівності `===`). > **Примітка:** Для методу String див. > {{jsxref("String.prototype.indexOf()")}}. @@ -78,18 +78,18 @@ console.log(indices); function updateVegetablesCollection (veggies, veggie) { if (veggies.indexOf(veggie) === -1) { veggies.push(veggie); - console.log('New veggies collection is : ' + veggies); + console.log('Нова овочева колекція: ' + veggies); } else if (veggies.indexOf(veggie) > -1) { - console.log(veggie + ' already exists in the veggies collection.'); + console.log(veggie + ' уже є в овочевій колекції.'); } } -var veggies = ['potato', 'tomato', 'chillies', 'green-pepper']; +var veggies = ['картопля', 'помідор', 'червоний гострий перець', 'зелений болгарський перець']; -updateVegetablesCollection(veggies, 'spinach'); -// Нова колекція veggies: potato,tomato,chillies,green-pepper,spinach -updateVegetablesCollection(veggies, 'spinach'); -// spinach вже є в колекції veggies. +updateVegetablesCollection(veggies, 'шпинат'); +// Нова колекція veggies: картопля,помідор,червоний гострий перець,зелений болгарський перець,шпинат +updateVegetablesCollection(veggies, 'шпинат'); +// шпинат уже є в овочевій колекції. ``` ## Поліфіл @@ -134,7 +134,7 @@ if (!Array.prototype.indexOf) { "use strict"; var k; - // 1. Нехай o буде результатом виклику ToObject, передаючи + // 1. Нехай o буде результатом виклику Object, передаючи // значення this як аргумент. if (this == null) { throw new TypeError('"this" is null or not defined'); @@ -173,7 +173,7 @@ if (!Array.prototype.indexOf) { // b. Нехай kPresent буде результатом виклику // внутрішнього методу HasProperty для o з аргументом Pk. // Цей крок можна поєднати з c - // c. Якщо значеня kPresent - істинне, то + // c. Якщо значення kPresent - істинне, то // i. Нехай elementK буде результатом виклику // внутрішнього методу Get для o з аргументом ToString(k). // ii. Нехай те саме буде результатом застосування From 9c8a7c2076c12130e62756d047af4de18cb23b2f Mon Sep 17 00:00:00 2001 From: Maksym Rozhytskyi Date: Sun, 5 Dec 2021 14:48:10 +0200 Subject: [PATCH 5/5] translation(js): review fixes Co-authored-by: Vitalii Perehonchuk --- .../javascript/reference/global_objects/array/indexof/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/uk/web/javascript/reference/global_objects/array/indexof/index.md b/files/uk/web/javascript/reference/global_objects/array/indexof/index.md index de1f47f374..6d37169116 100644 --- a/files/uk/web/javascript/reference/global_objects/array/indexof/index.md +++ b/files/uk/web/javascript/reference/global_objects/array/indexof/index.md @@ -27,7 +27,7 @@ indexOf(searchElement, fromIndex) ### Параметри - `searchElement` - - : Шуканий елемент у масиві. + - : Шуканий у масиві елемент. - `fromIndex` {{optional_inline}} - : Індекс, з якого потрібно почати пошук. Якщо індекс більший або дорівнює довжині масиву, повертається -1: це означає, що пошук у масиві виконуватись не буде. Якщо надане значення індексу є від’ємним числом, то воно приймається як зміщення від кінця масиву. Примітка: якщо наданий індекс є від’ємним, то пошук у масиві все одно виконується від початку до кінця. Якщо наданий індекс дорівнює 0 — пошук буде здійснюватися в усьому масиві. Усталено: 0 (перевіряється весь масив).