Array.prototype.indexOf()

Die Methode indexOf() gibt den ersten Index zurück, an dem das übergebene Element im Feld gefunden wurde, oder -1, wenn es nicht vorhanden ist.
 

Syntax

arr.indexOf(searchElement[, fromIndex = 0])

Parameter

searchElement
Element, nach dem im Feld gesucht werden soll.
fromIndex
Der Index, an dem die Suche begonnen werden soll. Ist der Index größer oder gleich der Länge des Feldes, wird -1 zurückgegeben; dies bedeutet, dass das Feld nicht durchsucht wird.
Ist der angegebene Index eine negative Zahl, wird er als Versatz vom Ende des Feldes verwendet. Anmerkung: Bei Verwendung eines negativen Index wird das Feld dennoch von vorne nach hinten durchsucht.
Default: 0 (Das gesamte Feld wird durchsucht)

Rückgabewert

Den ersten Index eines Elementes aus dem Array. -1 wenn keins gefunden wurde.

Beschreibung

indexOf() vergleicht searchElement mit den Elementen des Feldes und verwendet hierzu strikte Gleichheit (die gleiche Methode, die bei dem === - Operator (triple equals) angewendet wird).

Beispiele

indexOf() verwenden

Das folgende Beispiel verwendet indexOf(), um Werte in einem Feld zu lokalisieren.

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

Finde jedes Vorkommen eines Elementes

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]

Finde heraus, ob ein Element bereits vorhanden ist und aktualisiere das Feld

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'); 
// New veggies collection is : potato,tomato,chillies,green-papper,spinach
updateVegetablesCollection(veggies, 'spinach'); 
// spinach already exists in the veggies collection.

Polyfill

Die Methode indexOf() wurde dem ECMA-262-Standard in der fünften Edition hinzugefügt; sie könnte daher nicht in alles Browsern verfügbar sein. Das Fehlen kann umgangen werden, indem der folgende Code zu Beginn eines Skriptes eingesetzt wird. Dies ermöglicht die Verwendung von indexOf(), auch wenn die Methode nativ nicht unterstützt wird. Dieser Algorithmus stimmt mit dem überein, welcher in ECMA-262, 5. Edition, spezifiziert wurde, unter der Annahme, dass TypeError and Math.abs() ihre originalen Werte haben.

// Production steps of ECMA-262, Edition 5, 15.4.4.14
// Reference: http://es5.github.io/#x15.4.4.14
if (!Array.prototype.indexOf) {
  Array.prototype.indexOf = function(searchElement, fromIndex) {

    var k;

    // 1. Let o be the result of calling ToObject passing
    //    the this value as the argument.
    if (this == null) {
      throw new TypeError('"this" is null or not defined');
    }

    var o = Object(this);

    // 2. Let lenValue be the result of calling the Get
    //    internal method of o with the argument "length".
    // 3. Let len be ToUint32(lenValue).
    var len = o.length >>> 0;

    // 4. If len is 0, return -1.
    if (len === 0) {
      return -1;
    }

    // 5. If argument fromIndex was passed let n be
    //    ToInteger(fromIndex); else let n be 0.
    var n = +fromIndex || 0;

    if (Math.abs(n) === Infinity) {
      n = 0;
    }

    // 6. If n >= len, return -1.
    if (n >= len) {
      return -1;
    }

    // 7. If n >= 0, then Let k be n.
    // 8. Else, n<0, Let k be len - abs(n).
    //    If k is less than 0, then let k be 0.
    k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);

    // 9. Repeat, while k < len
    while (k < len) {
      // a. Let Pk be ToString(k).
      //   This is implicit for LHS operands of the in operator
      // b. Let kPresent be the result of calling the
      //    HasProperty internal method of o with argument Pk.
      //   This step can be combined with c
      // c. If kPresent is true, then
      //    i.  Let elementK be the result of calling the Get
      //        internal method of o with the argument ToString(k).
      //   ii.  Let same be the result of applying the
      //        Strict Equality Comparison Algorithm to
      //        searchElement and elementK.
      //  iii.  If same is true, return k.
      if (k in o && o[k] === searchElement) {
        return k;
      }
      k++;
    }
    return -1;
  };
}

Spezifikationen

Spezifikation Status Kommentar
ECMAScript 5.1 (ECMA-262)
Die Definition von 'Array.prototype.indexOf' in dieser Spezifikation.
Standard Initiale Definition. Implementiert in JavaScript 1.6.
ECMAScript 2015 (6th Edition, ECMA-262)
Die Definition von 'Array.prototype.indexOf' in dieser Spezifikation.
Standard  
ECMAScript 2017 Draft (ECMA-262)
Die Definition von 'Array.prototype.indexOf' in dieser Spezifikation.
Entwurf  

Browserkompatibilität

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Ja) 1.5 (1.8) 9 (Ja) (Ja)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Ja) (Ja) 1.0 (1.8) (Ja) (Ja) (Ja)

Kompatibilitätsanmerkung

  • Mit dem erscheinen von  Firefox 47 (Firefox 47 / Thunderbird 47 / SeaMonkey 2.44) gibt diese Methode nicht länger -0 zurück. Zum Beispiel: [0].indexOf(0, -0) wird nun immer +0 zurückgeben (Bug 1242043).

Siehe auch

Schlagwörter des Dokuments und Mitwirkende

 Mitwirkende an dieser Seite: schlagi123, Athyrion
 Zuletzt aktualisiert von: schlagi123,