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

Il metodo indexOf() ritorna il primo indice al quale l'elemento dato può essere trovato nell'array, o -1 se l'elemento non è presente.

Sintassi

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

Parametri

searchElement
Elemento da trovare nell'array.
fromIndex
L'indice da cui iniziare a cercare. Se l'indice è maggiore, o uguale a, la lunghezza dell'array, vien ritornato -1, che significa che l'array non sarà esaminato. Se il valore dell'indice fornito è un numero negativo, è preso a compensazione dalla fine dell'array. Nota: se l'indice fornito è negativo, l'array viene esaminato sempre dall'inizio alla fine. Se l'indice calcolato è minore di zero, allora tutto l'array sarà esaminato. Default: 0 (viene esaminato tutto l'array)

Valore ritornato

Il valore della posizione del primo elemento corrispondente trovato nell'array :  -1 se non trovato.

Descrizione

indexOf() confronta il searchElement con gli elementi dell'array usando strict equality (lo stesso metodo usato da === o operatore di ugualianza triplo).

Esempi

Uso di indexOf()

Il seguente esempio usa indexOf() per trovare un valore in 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

Trovare tutte le ricorrenze di un elemento

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]

Trovare se un elemento esiste nell'array o no, e aggiornare l'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() è stato aggiunto allo standard ECMA-262 nella quinta edizione; per questo è possibile che non sia presente in tutti i browser. Per aggirare il problema è possibile utilizzare il seguente codice all'inizio degli script. In questo modo puoi utilizzare indexOf() anche se non supportato nativamente. L'algoritmo è esattamente quello specificato in ECMA-262, quinta edizione, assumendo che  TypeError e Math.abs() abbiano i loro valori originali.

 

// 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;
  };
}

Specifiche

Specification Status Comment
ECMAScript 5.1 (ECMA-262)
The definition of 'Array.prototype.indexOf' in that specification.
Standard Definizione iniziale. Implementato in JavaScript 1.6.
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Array.prototype.indexOf' in that specification.
Standard  
ECMAScript Latest Draft (ECMA-262)
The definition of 'Array.prototype.indexOf' in that specification.
Draft  

Compatibilità dei browser

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

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

Note sulla compatibilità

  • A partire da Firefox 47 (Firefox 47 / Thunderbird 47 / SeaMonkey 2.44),  questo metodo non restituisce più -0. Per esempio, [0].indexOf(0, -0) adesso restituirà sempre +0 (bug 1242043).

Vedi anche

Tag del documento e collaboratori

Hanno collaborato alla realizzazione di questa pagina: dauricchio, federica, adrisimo74
Ultima modifica di: dauricchio,