--- title: Array.prototype.findIndex() slug: Web/JavaScript/Reference/Global_Objects/Array/findIndex translation_of: Web/JavaScript/Reference/Global_Objects/Array/findIndex original_slug: Web/JavaScript/Referencje/Obiekty/Array/findIndex ---
Metoda findIndex()
zwraca indeks pierwszego elementu tablicy, który spełnia kryteria postawione w funkcji testującej. W przeciwnym wypadku zwraca -1.
function isBigEnough(element) { return element >= 15; } [12, 5, 8, 130, 44].findIndex(isBigEnough); // zostanie zwrócony indeks czwartego elementu tablicy, // który wynosi 3
Zobacz także metodę {{jsxref("Array.find", "find()")}}, która zwraca wartość znalezionego elementu, zamiast jego indeksu.
arr.findIndex(callback[, thisArg])
callback
element
index
array
findIndex
.thisArg
this
w czasie wykonywania callback.
Indeks elementu tablicy, który pomyślnie przeszedł test, jeśli taki nie zostanie znaleziony, zwraca -1.
Metoda findIndex
wykonuje funkcję callback
dla każdego indeksu tablicy 0..długość - 1 (włącznie) w tablicy dopóki nie znajdzie tego, na którym funkcja callback
zwróci prawdę. Jeśli taki element zostanie znaleziony, findIndex
natychmiast zwraca indeks dla tej iteracji. Jeśli callback nigdy nie zwróci prawdy lub wielkość tablicy wynosi 0, findIndex
zwróci -1. W przeciwieństwie do innych metod tablicowych takich jak Array#some, w tablicach rzadkich callback
jest wywoływany nawet dla indeksów niewystępujących w tablicy.
callback
jest wywoływany z trzema argumentami: wartością elementu, indeksem elementu i przetwarzaną tablicą.
Jeśli thisArg
jest dołączony do findIndex
, zostanie użyty jako this
dla każdego wywołania . Jeśli nie, zostanie użyte {{jsxref("undefined")}}.
findIndex
nie zmienia tablicy na której jest wywoływany.
Zakres elementów przetwarzanych przez findIndex
jest ustawiany przed pierwszym wywołaniem funkcji callback
. Elementy, które są dodane po rozpoczęciu wywołania funkcji findIndex
nie będą przetworzone przez callback
. Jeśli istniejący, nieodwiedzony element tablicy zostanie zmieniony przez callback
, jego wartość przekazana do odwiedzającego callback
będzie tą wartością z momentu, w którym findIndex
odwiedzi indeks tego elementu, elementy usunięte, nie będą odwiedzone.
Poniższy przykład znajduje indeks elementu w tablicy, który jest liczbą pierwszą (lub zwraca -1 jeśli nie w tablicy nie ma liczby pierwszej).
function isPrime(element, index, array) { var start = 2; while (start <= Math.sqrt(element)) { if (element % start++ < 1) { return false; } } return element > 1; } console.log([4, 6, 8, 12].findIndex(isPrime)); // -1, nie znaleziono console.log([4, 6, 7, 12].findIndex(isPrime)); // 2
// https://tc39.github.io/ecma262/#sec-array.prototype.findIndex if (!Array.prototype.findIndex) { Object.defineProperty(Array.prototype, 'findIndex', { value: function(predicate) { // 1. Let O be ? ToObject(this value). if (this == null) { throw new TypeError('"this" ma wartość null lub undefined'); } var o = Object(this); // 2. Niech len będzie ? ToLength(? Get(O, "length")). var len = o.length >>> 0; // 3. Jeśli IsCallable(predicate) jest fałszem, rzuć wyjątek TypeError. if (typeof predicate !== 'function') { throw new TypeError('predykat musi być funkcją'); } // 4. Jeśli thisArg został podany, niech T będzie thisArg; w przeciwnym wypadku, niech T będzie undefined. var thisArg = arguments[1]; // 5. Let k be 0. var k = 0; // 6. Powtarzaj, dopóki k < len while (k < len) { // a. Niech Pk będzie ! ToString(k). // b. Niech kValue będzie ? Get(O, Pk). // c. Niech testResult będzie ToBoolean(? Call(predicate, T, « kValue, k, O »)). // d. Jeśli testResult jest prawdą, zwróć k. var kValue = o[k]; if (predicate.call(thisArg, kValue, k, o)) { return k; } // e. Zwiększ wartość k o 1. k++; } // 7. Return -1. return -1; } }); }
Jeśli musisz wspierać naprawdę przestarzałe silniki JavaScript, które nie wspierają Object.defineProperty
, najlepiej nie korzystać z metod Array.prototype
w ogóle, ponieważ nie można sprawić by były niepoliczalne.
Specification | Status | Komentarz |
---|---|---|
{{SpecName('ES2015', '#sec-array.prototype.findindex', 'Array.prototype.findIndex')}} | {{Spec2('ES2015')}} | Podstawowa definicja. |
{{SpecName('ESDraft', '#sec-array.prototype.findIndex', 'Array.prototype.findIndex')}} | {{Spec2('ESDraft')}} |
Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Edge | Opera | Safari |
---|---|---|---|---|---|---|---|
Basic support | {{CompatChrome(45.0)}} | {{CompatVersionUnknown}} | {{CompatGeckoDesktop("25.0")}} | {{CompatNo}} | Tak | Tak | {{CompatSafari("7.1")}} |
Feature | Android | Chrome for Android | Edge | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|---|
Basic support | {{CompatNo}} | 45.0 | {{CompatVersionUnknown}} | {{CompatGeckoMobile("25.0")}} | {{CompatNo}} | {{CompatNo}} | 8.0 |