--- title: Array.prototype.indexOf() slug: Web/JavaScript/Reference/Global_Objects/Array/indexOf translation_of: Web/JavaScript/Reference/Global_Objects/Array/indexOf original_slug: Web/JavaScript/Referencia/Objectes_globals/Array/indexOf ---
El mètode indexOf()
retorna la primera posició a la qual es troba l'element proporcionat, o bé -1 si l'element no es troba dins l'array.
arr.indexOf(elementAcercar[, posicioInicial = 0])
posicioInicial
sigui negatiu. Si la posició proporcionada és 0 es cercarà en tot l'array. El valor per defecte és 0 (cerca a tot l'array).indexOf()
compara elementAcercar amb els elements de l'array mitjançant la igualtat estricta (el mateix mètode utilitzat per l'operador ===
, també anomenat triple-equals).
indexOf()
L'exemple següent utilitza indexOf()
per a localitzar valors dins un array.
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
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]
function updateVegetablesCollection (veggies, veggie) { if (veggies.indexOf(veggie) === -1) { veggies.push(veggie); console.log('La nova col·lecció de verdures és : ' + veggies); } else if (veggies.indexOf(veggie) > -1) { console.log(veggie + ' ja existeix a la col·lecció de verdures.'); } } var veggies = ['potato', 'tomato', 'chillies', 'green-pepper']; updateVegetablesCollection(veggies, 'spinach'); // La nova col·lecció de verdures és : potato,tomato,chillies,green-papper,spinach updateVegetablesCollection(veggies, 'spinach'); // spinach ja existeix a la col·lecció de verdures.
indexOf()
va ser afegit al standard ECMA-262 a la cinquena versió; degut a això pot no estar present en tots els navegadors. Afegir el següent codi al principi dels vostres escripts us permetrà utilitzar aquesta funció en navegadors on indexOf
no sigui suportada de forma nativa. Aquest algoritme és el mateix que l'especificat a la cinquena versió de l'ECMA-262, donat que {{jsxref("Global_Objects/TypeError", "TypeError")}} i {{jsxref("Math.abs()")}} no han estat modificats.
// 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. Sigui o el resultat de cridar ToObject passant // el valor de this com a argument. if (this == null) { throw new TypeError('"this" is null or not defined'); } var o = Object(this); // 2. Sigui lenValue el resultat de cridar el mètode intern Get // de o amb l'argument "length". // 3. Sigui len ToUint32(lenValue). var len = o.length >>> 0; // 4. Si len és 0, retornem -1. if (len === 0) { return -1; } // 5. Si s'ha passat l'argument fromIndex n valdrà // ToInteger(fromIndex); si no n valdrà 0. var n = +fromIndex || 0; if (Math.abs(n) === Infinity) { n = 0; } // 6. Si n >= len, retornem -1. if (n >= len) { return -1; } // 7. Si n >= 0, k valdrà n. // 8. Si no, si n<0, k valdrà len - abs(n). // Si k és menor que 0, llavors k valdrà 0. k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); // 9. Repetir mentre k < len while (k < len) { // a. Sigui Pk ToString(k). // Això és implícit per a operands a l'esquerra de l'operador in // b. Sigui kPresent el resultat de cridar el mètode intern // HasProperty de o amb l'argument Pk. // Aquest pas es pot combinar amb c // c. Si kPresent és cert, llavors // i. Sigui elementK el resultat de cridar el mètode intern Get // de o amb l'argument ToString(k). // ii. Sigui same el resultat d'aplicar l'algoritme del // comparador d'igualtat estricta a // searchElement i elementK. // iii. Si same és cert retornem k. if (k in o && o[k] === searchElement) { return k; } k++; } return -1; }; }
Especificació | Estat | Comentaris |
---|---|---|
{{SpecName('ES5.1', '#sec-15.4.4.14', 'Array.prototype.indexOf')}} | {{Spec2('ES5.1')}} | Definició inicial. Implementat a JavaScript 1.6. |
{{SpecName('ES6', '#sec-array.prototype.indexof', 'Array.prototype.indexOf')}} | {{Spec2('ES6')}} | |
{{SpecName('ESDraft', '#sec-array.prototype.indexof', 'Array.prototype.indexOf')}} | {{Spec2('ESDraft')}} |
Característica | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Suport bàsic | {{CompatVersionUnknown}} | {{CompatGeckoDesktop("1.8")}} | {{CompatIE("9")}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |
Característica | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Suport bàsic | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatGeckoMobile("1.8")}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |
-0
. Per exemple, [0].indexOf(0, -0)
ara sempre retornarà +0
({{bug(1242043)}}).