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

Esta tradução está incompleta. Por favor, ajude a traduzir este artigo.

O método indexOf() retorna o primeiro índice em que o elemento pode ser encontrado no array, retorna -1 caso o mesmo não esteja presente.

Sintaxe

array.indexOf(elementoDePesquisa[, pontoInicial = 0])

Parâmetros

elementoDePesquisa
Elemento a ser pesquisado no array. 
pontoInicial
O índice para iniciar a procura. Se o índice for maior ou igual ao tamanho do array, é retornado -1 e signfica que o item não será procurado. Se o pontoInicial é fornecido com um número negativo,  é tomado como deslocamento da extremidade do array. Nota: se o pontoInicial fornecido é negativo, a procura no array acontece de frente para trás. Se o pontoInicial calculado é menor que 0, então o array inteiro será pesquisado. Padrão: 0 (pesquisa em todo array).

Descrição

indexOf() compara o  elementoDePesquisa com os elementos do Array usando igualdade estrita (o mesmo método usado pelo ===, ou triple-equals operator). 

Exemplos

Usando indexOf()

O exemplo seguinte usa indexOf() para localizar valores em um array

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

Encontrar todas as ocorrências de um elemento

var indices = [];
var array = ['a', 'b', 'a', 'c', 'a', 'd'];
var elemento = 'a';
var idx = array.indexOf(elemento);
while (idx != -1) {
  indices.push(idx);
  idx = array.indexOf(elemento, idx + 1);
}
console.log(indices);
// [0, 2, 4]

Encontrar se um elemento existe ou não e atualizar o array

function atualizarColecaoVegetais (vegetais, vegetal) {
    if (vegetais.indexOf(vegetal) === -1) {
        vegetais.push(vegetal);
        console.log('Nova coleção de vegetais é : ' + vegetais);
    } else if (vegetais.indexOf(vegetal) > -1) {
        console.log(vegetal + ' já existe na coleção de vegetais.');
    }
}

var vegetais = ['batata', 'tomate', 'pimenta', 'pimentao'];

atualizarColecaoVegetais(vegetais, 'espinafre');
// Nova coleção de vegatais é : batata,tomate,pimenta,pimentao,espinafre
atualizarColecaoVegetais(vegetais, 'espinafre');
// espinafre já existe na coleção de vegetais.

Polyfill

indexOf() foi adicionado ao ECMA-262 standard em sua 5 edição; como tal, não pode estar presente em todos navegadores.Você pode contornar isso utilizando o seguinte codigo no inicio de seus scripts. Isto permitirá que voce use o indexOf() quando não possuir suporte nativo. Esse algoritmo corresponde ao especificado no ECMA-262, edição 5, assumindo TypeError e Math.abs() tem seus valores originais.

// Passos para a produção do ECMA-262, Edition 5, 15.4.4.14
// Referência: http://es5.github.io/#x15.4.4.14
if (!Array.prototype.indexOf) {
  Array.prototype.indexOf = function(elementoDePesquisa, pontoInicial) {

    var k;

    //1. Deixe-o ser o resultado da chamada de toObject
    // passando o valor de this como argumento.
    if (this == null) {
      throw new TypeError('"this" é nulo (null) ou não foi definido (undefined');
    }

    var O = Object(this);

    // 2. Deixar o tamanhoValor ser o resultado da
    // chamada do método interno Get de 0 com o
    // argumento "length"
    // 3. Deixar o  tamanhoValor ser um ToUint32(tamanhoValor).
    var tamanho = O.length >>> 0;

    // 4. se o tamanho é 0, retorna -1.
    if (tamanho === 0) {
      return -1;
    }

    // 5. Se o argumento pontoInicial for passado, use o ToInteger(pontoInicial); senao use 0.
    var n = + pontoInicial || 0;

    if (Math.abs(n) === Infinity) {
      n = 0;
    }

    //6. Se n >= tamanho, retorna -1.
    if (n >= tamanho) {
      return -1;
    }

    // 7. Se n>= 0, entao k seja n.
    // 8. Senao, n<0, k seja tamanho - abs(n).
    // Se k é menor que 0, entao k seja 0.
    k = Math.max(n >= 0 ? n : tamanho - Math.abs(n), 0);

    // 9. Repita, enquanto k < tamanho
    while (k < tamanho) {
      // a. Deixe Pk ser ToString(k).
      //    isto é implicito para operandos LHS de um operador

      // b. Deixe o kPresent  ser o resultado da chamada do método interno de 0 com argumento Pk
      //      Este passo pode ser combinado com c.
      // c. Se kPresent é true, entao
      //    i.  Deixe o  elementK ser o resultado da chamada do metodo interno Get de 0 com argumento ToString(k)
      //   ii.  Deixe o resultado ser aplicado pelo Algoritmo de
      //        Comparação de Igualdade Estrita (Strict Equality Comparison) para o elementoDePesquisa e elementK
      //  iii.  caso verdadeiro, retorne k.
      if (k in O && O[k] === elementoDePesquisa) {
        return k;
      }
      k++;
    }
    return -1;
  };
}

Especificações

Especificação Status Comentários
ECMAScript 5.1 (ECMA-262)
The definition of 'Array.prototype.indexOf' in that specification.
Padrão

Definição inicial implementada no Javascript 1.6.

ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Array.prototype.indexOf' in that specification.
Padrão  

Compatibilidade entre Navegadores

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
Suporte Básico (Yes) 1.5 (1.8) 9 (Yes) (Yes)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Suporte Básico (Yes) (Yes) 1.0 (1.8) (Yes) (Yes) (Yes)

Veja também

Etiquetas do documento e colaboradores

Colaboradores desta página: LeoRiether, brunoluigi, ErickWendel, lucas.comino
Última atualização por: LeoRiether,