A imaginação é mais importante que o conhecimento. (Albert Einstein)

logo Moraga  
Principal
Categorias
Ferramentas

telescópio

Semanal Mensal Geral
  1. Converter Byte em KB, MB, GB, TB, EB
  2. Verificar CPF com PHP
  3. Captcha em PHP
  4. Jogo da velha ou Tic tac toe
  5. Copiando tabelas e removendo registros duplicados no MySQL
  6. removeChild - Remover elementos HTML por Javascript
  7. createElement - Solução compatível com os navegadores
  8. Removendo linhas e espaços em branco de strings
  9. Apache Expires Header - Cache de imagens, Javascript e CSS
  10. Verificar se existe um valor no Array em Javascript
  1. Converter Byte em KB, MB, GB, TB, EB
  2. Verificar CPF com PHP
  3. Captcha em PHP
  4. Copiando tabelas e removendo registros duplicados no MySQL
  5. Jogo da velha ou Tic tac toe
  6. createElement - Solução compatível com os navegadores
  7. removeChild - Remover elementos HTML por Javascript
  8. Gerando Thumbnails com PHP
  9. Removendo linhas e espaços em branco de strings
  10. Apache Expires Header - Cache de imagens, Javascript e CSS
  1. Converter Byte em KB, MB, GB, TB, EB
  2. Captcha em PHP
  3. Jogo da velha ou Tic tac toe
  4. createElement - Solução compatível com os navegadores
  5. Copiando tabelas e removendo registros duplicados no MySQL
  6. Apache Expires Header - Cache de imagens, Javascript e CSS
  7. Removendo linhas e espaços em branco de strings
  8. removeChild - Remover elementos HTML por Javascript
  9. Verificar se existe um valor no Array em Javascript
  10. Gerando Thumbnails com PHP
e-mail Enviar por e-mail imprimir Imprimir
Javascript

Verificar se existe um valor no Array em Javascript

Por Alejandro Fernandez Moraga

Foto por <a rel="nofollow" href="http://www.flickr.com/photos/squeakymarmot/379443029/">SqueakyMarmot</a> Foto por SqueakyMarmot

Prototype - extendendo objetos

Tornou-se possível extender objetos no Javascript a partir da sua versão 1.1. É possível adicionar atributos e métodos a todas as instâncias de um objeto.

Sintaxe

// Atributo
Objeto.prototype.atributo = valor;

// Método
Objeto.prototype.metodo = function() {
	...
}

Has

Com prototype conseguimos extender o objeto Array, adicionando o método has, que vai verificar se existe um valor no Array.

Array.prototype.has = function() {
	alert(this);
}

var teste = ['a', 'b', 'c'];
teste.has();

// a, b, c

O código é apenas um teste para verificar se o objeto Array foi extendido corretamente, imprimindo os itens do Array. Observe que os elementos do Array são acessados por this.

Array.prototype.has = function(search) {
	for (var i=0; i < this.length; i++) {
		if (this[i] == search) {
			return true;
		}
	}
}

Primeira tentativa de implementar o método has. O método verifica se o valor do argumento search existe no Array, se existir retorna true.

var teste = ['a', 'b', 'c'];

if (teste.has('b')) {
	alert('O valor "b" foi encontrado no Array');
}

Isso funciona até certo ponto. Se o índice do Array não for numérico ou numérico e não seguir uma seqüência vai resultar em um erro de execução. O Array é percorrido por um laço de condição tamanho do Array, não necessariamente reflete nos índices do Array.

// declara o Array
var teste = [];
// índice não numérico
teste['a'] = 'javascript';
teste['b'] = 'html';
teste['c'] = 'css';

// Erro
if (teste.has("javascript")) {
	...
}

Então, como percorrer todos os elementos de um Array e acessar seus valores mesmo que os índices não sejam numéricos? Há uma solução muito simples.

var teste = [];
teste['a'] = 'javascript';
teste['b'] = 'html';
teste['c'] = 'css';

for (key in teste) {
	document.writeln("Chave: "+k+", valor: "+teste[k]);
}

// resultado
Chave: a, valor: javascript
Chave: b, valor: html
Chave: c, valor: css

"Para cada índice no Array executar...". Todos os elementos do Array são percorridos, não importa se o índice for numérico ou não.

Além de verificar se o valor existe no Array, o método has retorna o índice correspondente ao valor encontrado, mas pode acontecer do índice corresponder a 0 (zero), e zero é igual falso, e retornar falso significao que não encontrou. A solução é retornar "-1" se o valor não for encontrado ou então não retornar o índice e apenas o valor booleano.

Código fonte

Array.prototype.has = function(search) {
	for (k in this)
		if (this[k] == search)
			return k;
	return -1;
}

Comentar
captcha