Deze vertaling is niet volledig. Help dit artikel te vertalen vanuit het Engels.
De indexOf()
methode retourneert het index getal behorende bij het gegeven element in een array. Indien het element niet is gevonden wordt -1 geretourneerd.
Syntax
arr.indexOf(searchElement[, fromIndex = 0])
Parameters
searchElement
- Het te zoeken element.
fromIndex
- De index waar vanaf gezocht moet worden. Als de index groter is dan de lengte van de array, dan wordt -1 geretourneerd welke inhoudt dat de array niet doorzocht is. Als de gegeven index een negatief getal is, wordt dit gebruikt als offset van het einde van de array. Opmerking: Als de gegeven index negatief is, wordt de array nog steeds van voren naar achteren doorzocht. Als de berekende index minder dan 0 is, dan wordt de gehele array doorzocht. Standaard: 0 (gehele array wordt doorzocht).
Return waarde
De eerste index van het element in de array; -1 als het element niet is gevonden.
Beschrijving
indexOf()
vergelijkt searchElement met elementen van de Array gebruikmakend van 'strict equality' (dezelfde methode zoals gebruikt door === of de gelijk-aan operator).
Voorbeelden
Het gebruik van indexOf()
De volgende voorbeelden gebruiken indexOf()
om waarden in een array te lokalizeren.
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
Alle voorvallen vinden van een element
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]
Zoek of een element bestaat in de array of niet en update de array
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
indexOf()
werd aan de ECMA-262 standaard toegevoegd in de 5de editie; als zodanig kan het niet in alle browsers voorkomen. U kunt hier een workaround voor gebruiken door de volgende code te plaatsen in het begin van uw scripts. Hiermee kunt u indexOf()
gebruiken als er nog geen native support beschikbaar is. Dit algoritme vergelijkt hetgeen gespecificeerd in ECMA-262, 5de editie, aangenomen dat TypeError
en Math.abs()
hun eigen waarden hebben.
// 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; }; }
Specificaties
Specification | Status | Comment |
---|---|---|
ECMAScript 5.1 (ECMA-262) The definition of 'Array.prototype.indexOf' in that specification. |
Standard | Initial definition. Implemented in JavaScript 1.6. |
ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'Array.prototype.indexOf' in that specification. |
Standard | |
ECMAScript 2017 Draft (ECMA-262) The definition of 'Array.prototype.indexOf' in that specification. |
Draft |
Browser compatibiliteit
Kenmerk | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basis Ondersteuning | (Yes) | 1.5 (1.8) | 9 | (Yes) | (Yes) |
Kenmerk | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basis Ondersteuning | (Yes) | (Yes) | 1.0 (1.8) | (Yes) | (Yes) | (Yes) |
Compatibiliteit opmerkingen
- Vanaf Firefox 47 (Firefox 47 / Thunderbird 47 / SeaMonkey 2.44), retouneert deze methode niet meer
-0
. Bijvoorbeeld,[0].indexOf(0, -0)
retourneert nu+0
(bug 1242043).