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: https://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).