This translation is incomplete. Please help translate this article from English.

Metoda indexOf() returnează prima poziție unde poate fi găsit un element într-un array sau -1 dacă nu este găsit.

Notă: Pentru aceeași metodă într-un string, vezi String.prototype.indexOf().

var a = [2, 9, 9]; 
a.indexOf(2); // 0 
a.indexOf(7); // -1

if (a.indexOf(7) === -1) {
  // elementul nu există in array
}

Sintaxă

arr.indexOf(elementulCăutat[, pozițiaDeÎnceput])

Parametri

elementulCăutat
Elementul pe care vrem sa il localizam in array.
pozițiaDeÎnceput Optional
Poziția de unde dorim să se înceapă căutarea. Dacă poziția de început este mai mare sau egală cu lungimea array-ului, -1 este returnat, ceea ce înseamnă că nu se va căuta în array. Dacă poziția de început dată este un număr negativ, poziția de început este calculată de la finalul array-ului. Notă: dacă poziția de început dată este negativă, se va căuta în array de la început până la final. Dacă poziția calculată este mai mică decât 0, atunci se va căuta în tot array-ul. Valoarea implicită: 0 (se va caută în tot array-ul).

Valoarea returnată

Prima poziție a elementului în array; -1 dacă nu este găsit.

Descriere

indexOf() compară elementulCăutat cu elementele din Array folosind egalitatea strictă (aceeași metodă folosită de operatorul === sau operatorul triplu-egal).

Exemple

Folosirea indexOf()

Următoarele exemple folosesc indexOf() pentru a localiza valori in 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

Găsirea tuturor aparițiilor unui 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]

Căutarea dacă un element există sau nu într-un array și actualizarea array-ului

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-pepper,spinach
updateVegetablesCollection(veggies, 'spinach'); 
// spinach already exists in the veggies collection.

Polyfill

indexOf() a fost adăugat în a 5-a ediție a standardului ECMA-262; ceea ce înseamnă că e posibil să nu fie disponibil în toate browserele. Ca și alternativă, se poate folosi prin utilizarea codului de mai jos la începutul script-urilor dvs. Acest cod va permite folosirea indexOf() și în browserele în care nu este suportat încă. Acest algoritm este același ca și cel specificat în cea de a 5-a ediție a standardului ECMA-262, presupunând că TypeError și Math.abs() au valorile lor originale.

if (!Array.prototype.indexOf)
  Array.prototype.indexOf = function(searchValue, index) {
    // In non-strict-mode, if the `this` variable is null
    // or undefined, then it is set the the window object.
    // Else, `this` is automaticly converted to an object.
    var len = this.length >>> 0; // convert ot number or 0
    
    index |= 0;              // rounds and NaN-checks
    if (index < 0)             // check if negative start
      index = Math.max(len - index, 0);
    else if (index >= len) // else, check if too big
      return -1;
    
    if (searchValue === undefined)
      // Because searchValue is undefined, keys that
      // don't exist will have the same value as the
      // searchValue, and thus do need to be checked.
      do {
        if (index in this && this[index] === undefined)
          return index;
      } while (++index !== len)
    else
      // Because searchValue is not undefined, there's no
      // need to check if the current key is in the array
      // because if the key isn't in the array, then it's
      // undefined which is not equal to the searchValue.
      do {
        if (this[index] === searchValue)
          return index;
      } while (++index !== len)
    
    // if nothing was found, then simply return -1
    return -1;
  };

Totuși, dacă sunteți mai interesat de părțile tehnice definite de standardul ECMA, și mai puțin îngrijorat de performanță sau pregnanță, mai jos este un polifyll mult mai util.

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

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

Specificații

Specificație Status Comentariu
ECMAScript 5.1 (ECMA-262)
The definition of 'Array.prototype.indexOf' in that specification.
Standard Definiție inițială. Implementat în 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.
Living Standard  

Compatibilitatea browserelor

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support Yes Yes1.59 Yes Yes
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Basic support Yes Yes Yes4 Yes Yes Yes

Note de compatibilitate

  • Începând cu Firefox 47 (Firefox 47 / Thunderbird 47 / SeaMonkey 2.44),  această metodă nu va mai returna -0. De exemplu, [0].indexOf(0, -0) va returna întotdeauna +0 (bug 1242043).

Puteți accesa de asemenea

Document Tags and Contributors

 Contributors to this page: vrinceanuv
 Last updated by: vrinceanuv,