diff options
author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:43:23 -0500 |
---|---|---|
committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:43:23 -0500 |
commit | 218934fa2ed1c702a6d3923d2aa2cc6b43c48684 (patch) | |
tree | a9ef8ac1e1b8fe4207b6d64d3841bfb8990b6fd0 /files/uk/web/javascript/reference/global_objects/array/indexof | |
parent | 074785cea106179cb3305637055ab0a009ca74f2 (diff) | |
download | translated-content-218934fa2ed1c702a6d3923d2aa2cc6b43c48684.tar.gz translated-content-218934fa2ed1c702a6d3923d2aa2cc6b43c48684.tar.bz2 translated-content-218934fa2ed1c702a6d3923d2aa2cc6b43c48684.zip |
initial commit
Diffstat (limited to 'files/uk/web/javascript/reference/global_objects/array/indexof')
-rw-r--r-- | files/uk/web/javascript/reference/global_objects/array/indexof/index.html | 260 |
1 files changed, 260 insertions, 0 deletions
diff --git a/files/uk/web/javascript/reference/global_objects/array/indexof/index.html b/files/uk/web/javascript/reference/global_objects/array/indexof/index.html new file mode 100644 index 0000000000..049c3ab869 --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/array/indexof/index.html @@ -0,0 +1,260 @@ +--- +title: Array.prototype.indexOf() +slug: Web/JavaScript/Reference/Global_Objects/Array/indexOf +tags: + - Array + - JavaScript + - Масив + - метод +translation_of: Web/JavaScript/Reference/Global_Objects/Array/indexOf +--- +<div>{{JSRef}}</div> + +<p>Метод <code><strong>indexOf()</strong></code> повертає перший індекс, за яким даний елемент був знайдений в масиві, а якщо він відсутній, то повертає -1.</p> + +<div class="note"> +<p><strong>Примітка:</strong> Щодо метода String, дивіться {{jsxref("String.prototype.indexOf()")}}.</p> +</div> + +<pre class="brush: js">var a = [2, 9, 9]; +a.indexOf(2); // 0 +a.indexOf(7); // -1 + +if (a.indexOf(7) === -1) { + // елемент не існує у масиві +} +</pre> + +<h2 id="Синтаксис">Синтаксис</h2> + +<pre class="syntaxbox"><var>arr</var>.indexOf(<var>searchElement[</var>, <var>fromIndex]</var>)</pre> + +<h3 id="Параметри">Параметри</h3> + +<dl> + <dt><code>searchElement</code></dt> + <dd>Елемент, який потрібно знайти.</dd> + <dt><code>fromIndex</code> {{optional_inline}}</dt> + <dd>Індекс, з якого починається пошук. Якщо індекс більше або дорівнює довжині масиву, повертається -1, що означає, що масив не буде шукатися. Якщо значення показника є від'ємним числом, то воно трактується як зміщення від кінця масиву.</dd> + <dd><code>Примітка:</code> якщо наданий індекс від'ємний, масив все ще ітерується спереду назад. Якщо індекс рівний 0, то буде проведений пошук по всьому масиву. За замовчуванням: 0 (виконується пошук по всьому масиву).</dd> +</dl> + +<h3 id="Значення_яке_повертається">Значення, яке повертається</h3> + +<p>Перший індекс елемента в масиві; якщо не знайдено, то <strong>-1</strong>.</p> + +<h2 id="Опис">Опис</h2> + +<p><code>indexOf()</code> порівнює <code>searchElement</code> з елементами Масиву, використовуючи <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Using_the_Equality_Operators">строгу рівність</a> (той самий метод, що використовується з допомогою <code>===</code> або потрійним дорівнює).</p> + +<h2 id="Приклад">Приклад</h2> + +<h3 id="Використання_indexOf()">Використання <code>indexOf()</code></h3> + +<p>У наступному прикладі <code>indexOf()</code> використовується для пошуку значень в масиві.</p> + +<pre class="brush: 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 +</pre> + +<h3 id="Пошук_всіх_відопвідностей_на_елементі">Пошук всіх відопвідностей на елементі</h3> + +<pre class="brush: 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] +</pre> + +<h3 id="Пошук_чи_існує_елемент_в_масиві_і_його_оновлення">Пошук, чи існує елемент в масиві, і його оновлення </h3> + +<pre class="brush: js">function updateVegetablesCollection (veggies, veggie) { + if (veggies.indexOf(veggie) === -1) { + veggies.push(veggie); + console.log('Оновлений набір овочів : ' + veggies); + } else if (veggies.indexOf(veggie) > -1) { + console.log(veggie + ' вже існує у наборі овочів.'); + } +} + +var veggies = ['картопля', 'помідор', 'чилі', 'зелений перець']; + +updateVegetablesCollection(veggies, 'шпинат'); +// Оновлений набір овочів: картопля,помідор,чилі,зелений перець,шпинат +updateVegetablesCollection(veggies, 'шпинат'); +// шпинат вже існує у наборі овочів. +</pre> + +<h2 id="Поліфіл">Поліфіл</h2> + +<p><code>indexOf()</code> був доданий в стандарт ECMA-262 в 5-му виданні; як такий він може бути присутнім не у всіх браузерах. Це можна обійти, використовуючи наступний код на початку скриптів. Це дозволить вам використовувати метод <code>indexOf()</code>, коли ще немає вбудованої підтримки в браузері. Цей алгоритм збігається із зазначеною в ECMA-262, 5-е видання, припускаючи, що{{jsxref("Global_Objects/TypeError", "TypeError")}} і {{jsxref("Math.abs()")}} має свої оригінальні значення.</p> + +<pre class="brush: js">if (!Array.prototype.indexOf) { + Array.prototype.indexOf = function indexOf(member, startFrom) { + /* + У спрощеному режимі, якщо змінна `this` має значення null або + undefined, то вона встановлюється в об'єкт window. В іншому випадку + `this` автоматично перетворюється в об'єкт. У строгому режимі, якщо + змінна 'this' має значення null або undefined, генерується 'TypeError'. + */ + if (this == null) { + throw new TypeError("Array.prototype.indexOf() - can't convert `" + this + "` to object"); + } + + var + index = isFinite(startFrom) ? Math.floor(startFrom) : 0, + that = this instanceof Object ? this : new Object(this), + length = isFinite(that.length) ? Math.floor(that.length) : 0; + + if (index >= length) { + return -1; + } + + if (index < 0) { + index = Math.max(length + index, 0); + } + + if (member === undefined) { + /* + Оскільки `member` не визначено, ключі, які не існують, + будуть мати те ж значення, що і `member`, і, отже, повинні + бути перевірені. + */ + do { + if (index in that && that[index] === undefined) { + return index; + } + } while (++index < length); + } else { + do { + if (that[index] === member) { + return index; + } + } while (++index < length); + } + + return -1; + }; +}</pre> + +<p>Однак, якщо ви більше зацікавлені у всіх маленьких технічних бітах, визначених стандартом ECMA, і менше стурбовані продуктивністю або лаконічністю, то ви можете знайти це більш описове заповнення більш корисним.</p> + +<pre class="brush: js">// Кроки продукції ECMA-262, Edition 5, 15.4.4.14 +// Посилання: http://es5.github.io/#x15.4.4.14 +if (!Array.prototype.indexOf) { + Array.prototype.indexOf = function(searchElement, fromIndex) { + + var k; + + // 1. Нехай o є результатом виклику ToObject, що передає це + // значення в якості аргументу. + 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, return -1. + if (len === 0) { + return -1; + } + + // Якщо аргумент fromIndex був переданий, let n = + // ToInteger(fromIndex); інакше let n = 0. + var n = fromIndex | 0; + + // 6. Якщо n >= len, return -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 + while (k < len) { + // а. Нехай Pk дорівнює ToString(k). Це неочевидно для лівосторонніх операндів оператора in + // б. Нехай kPresent буде результатом виклику + // внутрішнього метода o HasProperty з аргументом Pk. + // Цей крок можна поєднати з в + // в. Якщо kPresent дорівнює true, тоді + // i. Нехай elementK буде результатом виклику + // внутрішнього метода o Getwith з аргументом ToString(k). + // ii. Нехай те саме буде результатом застосування + // Алгоритму Строгого Порівняння (Strict Equality Comparison Algorithm) + // до searchElement та elementK. + // iii. Якщо те саме дорівнює true, повернути k. + if (k in o && o[k] === searchElement) { + return k; + } + k++; + } + return -1; + }; +} +</pre> + +<h2 id="Специфікації">Специфікації</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Специфікація</th> + <th scope="col">Статус</th> + <th scope="col">Коментар</th> + </tr> + <tr> + <td>{{SpecName('ES5.1', '#sec-15.4.4.14', 'Array.prototype.indexOf')}}</td> + <td>{{Spec2('ES5.1')}}</td> + <td>Початкове визначення. Реалізовано у JavaScript 1.6.</td> + </tr> + <tr> + <td>{{SpecName('ES6', '#sec-array.prototype.indexof', 'Array.prototype.indexOf')}}</td> + <td>{{Spec2('ES6')}}</td> + <td></td> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-array.prototype.indexof', 'Array.prototype.indexOf')}}</td> + <td>{{Spec2('ESDraft')}}</td> + <td></td> + </tr> + </tbody> +</table> + +<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> + +<div> + + +<p>{{Compat("javascript.builtins.Array.indexOf")}}</p> +</div> + +<h2 id="Примітки_щодо_сумісності">Примітки щодо сумісності</h2> + +<ul> + <li>Починаючи з Firefox 47 {{geckoRelease(47)}}, цей метод більше не повертатиме <code>-0</code>. Наприклад, <code>[0].indexOf(0, -0)</code> тепер завжди повертатиме <code>+0</code> ({{bug(1242043)}}).</li> +</ul> + +<h2 id="Див._також">Див. також</h2> + +<ul> + <li>{{jsxref("Array.prototype.lastIndexOf()")}}</li> + <li>{{jsxref("TypedArray.prototype.indexOf()")}}</li> + <li>{{jsxref("String.prototype.indexOf()")}}</li> +</ul> |