MDN wants to talk to developers like you: https://qsurvey.mozilla.com/s3/a3e7b5301fea

Array.prototype.find()

This is a new technology, part of the ECMAScript 2015 (ES6) standard.
This technology's specification has been finalized, but check the compatibility table for usage and implementation status in various browsers.

O método find() retorna um valor no array, se algum elemento no array satisfazer a função de teste provida. Caso contrario undefined é retornado.

Veja também o método findIndex(), que retorna o index de um elemento encontrado no array, ao invés do seu valor.

Sintaxe

arr.find(callback[, thisArg])

Parâmetros

callback
Função executada a cada iteração do array, recebendo três argumentos:
element
O elemento atual que está sendo processado no array.
index
O índice do elemento atualmente sendo processado no array.
array
O array sobre o qual find foi chamado.
thisArg
Opcional. Objeto usado como this quando executando o callback.

Descrição

O método find executa a função callback uma vez para cada elemento presente no array até que encontre um cujo callback  retorne o valor true. Se o elemento é encontrado, find retorna imediatamente o valor deste elemento. Caso contrário, find retorna   undefined. O callback somente é acionado para os índices do array que possuem valor atribuido; ele não é acionado para índices que tenham sido deletados ou que nunca tenham tido valores atribuídos.

callback é acionado com três argumentos: o valor do elemento, o índice do elemento e o objeto do Array que está sendo cruzado.

Se um parâmetro thisArg é provido ao find, ele será usado como o this para cada acionamento do callback. Se não for provido, então undefined é usado.

find não altera a array a qual foi acionado.

O alcance dos elementos processados por find é definido antes do primeiro acionamento do callback. Elementos que são anexados à array após o início da chamada to find não serão visitados pelo callback. Se um elemento existente, não visitado da array for alterado pelo callback, o valor que é passado ao callback  que o visita será o valor do momento que find visita o índice daquele elemento; elementos que são excluídos não são visitados.

Exemplos

Encontrar um número primo em uma array

O exemplo a seguir encontra um elemento dentro da array que é número primo (ou retorna undefined se não houverem números primos).

function isPrime(element, index, array) {
  var start = 2;
  while (start <= Math.sqrt(element)) {
    if (element % start++ < 1) {
      return false;
    }
  }
  return element > 1;
}

console.log([4, 6, 8, 12].find(isPrime)); // undefined, not found
console.log([4, 5, 8, 12].find(isPrime)); // 5

Polyfill

Este método foi adicionado à especificação do ECMAScript 2015 e pode não estar disponível em todas as implementações do JavaScript. Entretanto, você pode fazer um polyfill para o Array.prototype.find com o trecho de código abaixo:

if (!Array.prototype.find) {
  Array.prototype.find = function(predicate) {
    if (this === null) {
      throw new TypeError('Array.prototype.find called on null or undefined');
    }
    if (typeof predicate !== 'function') {
      throw new TypeError('predicate must be a function');
    }
    var list = Object(this);
    var length = list.length >>> 0;
    var thisArg = arguments[1];
    var value;

    for (var i = 0; i < length; i++) {
      value = list[i];
      if (predicate.call(thisArg, value, i, list)) {
        return value;
      }
    }
    return undefined;
  };
}

Especificações

Especificação Status Comentário
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Array.prototype.find' in that specification.
Standard Definição inicial.

Compatibilidade do Navegador

Funcionalidade Chrome Firefox (Gecko) Internet Explorer Opera Safari
Suporte básico 45.0 25.0 (25.0) Não suportado Não suportado 7.1
Funcionalidade Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Suporte básico Não suportado Não suportado 25.0 (25.0) Não suportado Não suportado 8.0

Veja também

Etiquetas do documento e colaboradores

 Colaboradores desta página: cezaraugusto, Selminha, raduq
 Última atualização por: cezaraugusto,