We're looking for a user researcher to understand the needs of developers and designers. Is this you or someone you know? Check out the post: https://mzl.la/2IGzdXS

Deze vertaling is niet volledig. Help dit artikel te vertalen vanuit het Engels.

De methode findIndex() geeft de index terug van het eerste element in de array waarvoor de gegeven functie voldoet. Indien er geen element wordt gevonden, zal -1 teruggegeven worden.

 

Zie ook de methode find(), die een waarde teruggeeft van het gevonden element in plaats van de index.

Syntax

arr.findIndex(callback[, thisArg])

Parameters

callback
De functie die wordt uitgevoerd voor elk element in de array, met volgende drie argumenten:
element
Het huidig te evalueren element uit de array.
indexOptional
De index van het huidig te evalueren element binnen de array.
arrayOptional
De array waarop de methode findIndex was aangeroepen.
thisArgOptional
Optioneel. Het object dat als this kan gebruikt worden tijdens de uitvoer van callback.

Return value

De index binnen de array van het gevonden element; anders, -1.

Beschrijving

De methode findIndex voert de callback function uit voor elke index uit de array 0..length-1 (inclusief) tot wanneer er een element is waarvoor callback een waarde teruggeeft overeenkomstig met true. Als zo een element wordt gevonden, dan geeft findIndex onmiddellijk de index terug van deze iteratie. Als de functie voor geen enkel element voldoet of als length van de array 0 is, zal findIndex -1 teruggeven.  In tegenstelling tot andere array methodes zoals Array#some, wordt callback ook aangeroepen ook voor indexen zonder element in de array.

callback heeft drie argumenten: de waarde van het element, de index van het element, en het Array element dat wordt doorlopen.

Als een thisArg parameter wordt opgegeven voor findIndex zal het gebruikt worden als this bij elke aanroep van callback. Als het niet wordt opgegeven dan wordt undefined gebruikt.

findIndex past de array waarop het wordt aangeroepen niet aan.

De reeks van elementen verwerkt door findIndex wordt opgemaakt voor de eerste aanroep van callback. Elementen die aan de array worden toegevoegd na de aanroep van findIndex zullen niet worden doorlopen door callback. Als een bestaand element, dat nog niet werd doorlopen, aangepast wordt door callback, dan zal deze waarde doorgegeven aan callback; verwijderde elementen worden ook doorlopen.

Examples

Vind de index van een priemgetal in een array

Het volgende voorbeeld toont hoe een priemgetal kan gevonden worden in een array met getallen (of -1 als er geen priemgetal in de array zit).

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, not found
console.log([4, 6, 7, 12].findIndex(isPrime)); // 2

Vind index met een array function

Het volgende voorbeeld toont hoe een element uit de array fruits kan gevonden worden met de arrow function syntax.

const fruits = ["apple", "banana", "cantaloupe", "blueberries", "grapefruit"];

const index = fruits.findIndex(fruit => fruit === "blueberries");

console.log(index); // 3
console.log(fruits[index]); // blueberries

Polyfill

// 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" is null or not defined');
      }

      var o = Object(this);

      // 2. Let len be ? ToLength(? Get(O, "length")).
      var len = o.length >>> 0;

      // 3. If IsCallable(predicate) is false, throw a TypeError exception.
      if (typeof predicate !== 'function') {
        throw new TypeError('predicate must be a function');
      }

      // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
      var thisArg = arguments[1];

      // 5. Let k be 0.
      var k = 0;

      // 6. Repeat, while k < len
      while (k < len) {
        // a. Let Pk be ! ToString(k).
        // b. Let kValue be ? Get(O, Pk).
        // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
        // d. If testResult is true, return k.
        var kValue = o[k];
        if (predicate.call(thisArg, kValue, k, o)) {
          return k;
        }
        // e. Increase k by 1.
        k++;
      }

      // 7. Return -1.
      return -1;
    },
    configurable: true,
    writable: true
  });
}

Als je echt verouderde JavaScript engines moet blijven ondersteunen die Object.defineProperty niet supporteren, is het beter van Array.prototype methodes helemaal niet te voorzien als polyfill, omdat je ze toch niet niet-enumereerbaar kan maken.

Specificaties

Specification Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Array.prototype.findIndex' in that specification.
Standard Initial definition.
ECMAScript Latest Draft (ECMA-262)
The definition of 'Array.prototype.findIndex' in that specification.
Draft  

Browser compatibility

FunctieChromeEdgeFirefoxInternet ExplorerOperaSafari
Basisondersteuning45 Ja25 Nee328
FunctieAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Basisondersteuning Ja Ja Ja4 Ja8 Ja

Zie ook

Documentlabels en -medewerkers

Labels: 
Aan deze pagina hebben bijgedragen: snijkerm
Laatst bijgewerkt door: snijkerm,