From 218934fa2ed1c702a6d3923d2aa2cc6b43c48684 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:43:23 -0500 Subject: initial commit --- .../global_objects/array/indexof/index.html | 260 +++++++++++++++++++++ 1 file changed, 260 insertions(+) create mode 100644 files/uk/web/javascript/reference/global_objects/array/indexof/index.html (limited to 'files/uk/web/javascript/reference/global_objects/array/indexof') 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 +--- +
{{JSRef}}
+ +

Метод indexOf() повертає перший індекс, за яким даний елемент був знайдений в масиві, а якщо він відсутній, то повертає -1.

+ +
+

Примітка: Щодо метода String, дивіться {{jsxref("String.prototype.indexOf()")}}.

+
+ +
var a = [2, 9, 9];
+a.indexOf(2); // 0
+a.indexOf(7); // -1
+
+if (a.indexOf(7) === -1) {
+  // елемент не існує у масиві
+}
+
+ +

Синтаксис

+ +
arr.indexOf(searchElement[, fromIndex])
+ +

Параметри

+ +
+
searchElement
+
Елемент, який потрібно знайти.
+
fromIndex {{optional_inline}}
+
Індекс, з якого починається пошук. Якщо індекс більше або дорівнює довжині масиву, повертається  -1, що означає, що масив не буде шукатися. Якщо значення показника є від'ємним числом, то воно трактується як зміщення від кінця масиву.
+
Примітка: якщо наданий індекс від'ємний, масив все ще ітерується спереду назад. Якщо індекс  рівний 0, то буде проведений пошук по всьому масиву. За замовчуванням: 0 (виконується пошук по всьому масиву).
+
+ +

Значення, яке повертається

+ +

Перший індекс елемента в масиві; якщо не знайдено, то -1.

+ +

Опис

+ +

indexOf() порівнює searchElement з елементами Масиву, використовуючи строгу рівність (той самий метод, що використовується з допомогою === або потрійним дорівнює).

+ +

Приклад

+ +

Використання indexOf()

+ +

У наступному прикладі indexOf() використовується для пошуку значень в масиві.

+ +
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
+
+ +

Пошук всіх відопвідностей на елементі

+ +
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]
+
+ +

Пошук, чи існує елемент в масиві, і його оновлення 

+ +
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, 'шпинат');
+// шпинат вже існує у наборі овочів.
+
+ +

Поліфіл

+ +

indexOf() був доданий в стандарт ECMA-262 в 5-му виданні; як такий він може бути присутнім не у всіх браузерах. Це можна обійти, використовуючи наступний код на початку скриптів. Це дозволить вам використовувати метод indexOf(), коли ще немає вбудованої підтримки в браузері. Цей алгоритм збігається із зазначеною в ECMA-262, 5-е видання, припускаючи, що{{jsxref("Global_Objects/TypeError", "TypeError")}} і {{jsxref("Math.abs()")}} має свої оригінальні значення.

+ +
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;
+  };
+}
+ +

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

+ +
// Кроки продукції 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;
+  };
+}
+
+ +

Специфікації

+ + + + + + + + + + + + + + + + + + + + + + + + +
СпецифікаціяСтатусКоментар
{{SpecName('ES5.1', '#sec-15.4.4.14', 'Array.prototype.indexOf')}}{{Spec2('ES5.1')}}Початкове визначення. Реалізовано у JavaScript 1.6.
{{SpecName('ES6', '#sec-array.prototype.indexof', 'Array.prototype.indexOf')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.indexof', 'Array.prototype.indexOf')}}{{Spec2('ESDraft')}}
+ +

Сумісність з веб-переглядачами

+ +
+ + +

{{Compat("javascript.builtins.Array.indexOf")}}

+
+ +

Примітки щодо сумісності

+ + + +

Див. також

+ + -- cgit v1.2.3-54-g00ecf