2. Objetos e Arrays
Diego Pessoa
Uma lista associativa é análoga a um dicionário.
A cada chave da lista, é associado um valor.
Para criar um objeto, basta associá-lo ao valor {}.
Depois, podem-se associar valores (propriedades) ao objeto usando a sintaxe:
var cores = {};
cores['milho'] = 'Amarelo';
cores['arroz'] = 'Branco';
cores['limao'] = 'Verde';
A mesma sintaxe é usada para recuperar os elementos do objeto:
document.write(cores['milho']);
var computers = {
'trs-80' : 'Radio Shack',
2600 : 'Atari',
'adam' : 'Coleco'
};
document.write(computers['adam'] + ', ' + computers[2600] );
Para adicionar um novo elemento a um objeto já existente, basta defini-lo:
var computers = {
'trs-80' : 'Radio Shack',
2600 : 'Atari', 'adam' : 'Coleco'
};
computers['mac'] = 'Apple';
document.write(computers['adam'] + ', '
+ computers[2600] + ', '
+ computers['mac'] );
É possível utilizar uma sintaxe alternativa (mais comum) para acessar alguns elementos de um objeto.
objeto['nome'] → objeto.nome
var sistemas = {
stallman : 'GNU',
'linus' : "Linux"
};
sistemas.apple = 'Mac OS X';
sistemas["microsoft"] = 'Windows';
document.write(
sistemas['stallman'] + " " );
document.write(sistemas.linus + " ");
document.write(sistemas.microsoft + " ");
document.write(sistemas["apple"]);
A estrutura de controle for/in serve para percorrer todas as propriedades de um objeto, mesmo que não se conheça seus nomes.
Sintaxe:
var sistemas = {
stallman : 'GNU',
'linus' : "Linux"
};
sistemas.apple = 'Mac OS X';
sistemas["microsoft"] = 'Windows';
for (var x in sistemas) {
document.write(
x + ': ' + sistemas[x] + ' | '
);
}
Um objeto pode ter outros objetos como membros:
var comp = {};
comp.mac = {};
comp.mac.sistema = "Mac OS X";
comp.mac.fabricante = "Apple";
comp.winpc = {}
comp.winpc.sistema = "Windows";
comp.winpc.fabricante = "Microsoft";
for(tipo in comp){
document.write("<h1>" + tipo + "</h2><ul>");
for(prop in comp[tipo])
document.write("<li><em>" + prop + "</em>: " + comp[tipo][prop] + "</li>");
document.write("</ul>");
}
var vazio = [];
var primos = [2, 3, 5, 7, 11];
var outros = [ 1.1, true, "a" ];
Os elementos de um array são acessados pelos seus índices, que são números inteiros.
O primeiro elemento tem índice 0.
O último índice é sempre N-1, onde N é o número de elementos do array.
Não há necessidade de se preocupar com alocação de espaço.
var pratos = ['Pizza', 'Chocolate', 'Lasanha', 'Feijoada'];
document.write(
"Eu quero " + pratos[2] + " com " + pratos[3] + "."
);
var pratos = ['Pizza', 'Chocolate', 'Lasanha', 'Feijoada'];
document.write(
"Eu quero " + pratos.length + " pratos: ");
for(var i=0; i<pratos.length; i++)
document.write(pratos[i] + ' ');
var pratos = ['Pizza', 'Chocolate','Lasanha', 'Feijoada'];
document.write(
"Eu quero " + pratos.length + " pratos: ");
document.write(pratos);
O comprimento do array (length) pode ser modificado diretamente em tempo de execução.
Elementos não inicializados recebem o valor undefined.
Um array é um objeto como qualquer outro.
Um array pode ter propriedades (como qualquer objeto).
As propriedades e os índices do array não se misturam.
Inteiros e strings que podem ser convertidas em inteiros são consideradas índices.
Text
Em um array, a estrutura for/in recupera tanto as propriedades do objeto, quanto os índices do array.
pratos = [ 'Pizza', 'Chocolate', 'Lasanha', 'Feijoada' ];
pratos['extra'] = 'Surpresa do dia'; pratos['6'] = 'Salada';
pratos[0.5] = 'Promoção';
pratos[true] = 'Molho';
document.write("Conteúdo do objeto: <ul>");
for (var x in pratos)
document.write(
'<li>' + x + ': ' + pratos[x] + '</li>'
);
document.write("</ul>");
A palavra-chave delete pode ser usada para excluir propriedades do objeto ou índices do array.
Ao se excluir um elemento do arrays, os elemntos seguintes não são movidos.
Sintaxe:
delete objeto.nome; delete objeto['valor']; delete objeto[variável]
delete pratos[2];
delete pratos.extra;
Javascript define alguns métodos que podem ser utilizados em arrays:
join
reverse
sort
concat
slice
splice
push
pop
shif
unshift
join([separador]
Retorna a concatenação de todos os elementos do array, intercalados com o separador.
Se o separador não for especificado, usa- se ','.
var pratos = [ 'Pizza', 'Chocolate', 'Lasanha', 'Feijoada' ];
document.write( pratos.join('; ') );
Pizza; Chocolate; Lasanha; Feijoada
var pratos = [ 'Pizza', 'Chocolate', 'Lasanha', 'Feijoada' ];
pratos.reverse();
document.write( pratos.join('; ') );
Feijoada; Lasanha; Chocolate; Pizza
sort()
Ordena os elementos do array alfabeticamente.
var pratos = [ 'Pizza', 'Chocolate', 'Lasanha', 'Feijoada' ];
pratos.sort();
document.write( pratos.join('; ') );
Chocolate; Feijoada; Lasanha; Pizza
concat(elemento+)
var pratos = [ 'Pizza', 'Chocolate', 'Lasanha', 'Feijoada' ];
var novospratos = pratos.concat(
'Salada', 'Macarrão' );
document.write( novospratos );
Pizza,Chocolate,Lasanha,Feijoada,Salada,Macarrão
slice(início,[fim])
var pratos = [ 'Pizza', 'Chocolate', 'Lasanha', 'Feijoada' ];
document.write( pratos.slice(1,3) + " <br>\n" );
document.write( pratos.slice(1) + " <br>\n");
document.write( pratos.slice(-2) );
Chocolate,Lasanha<br>
Chocolate,Lasanha,Feijoada<br>
Lasanha<br>
Remove elementos do array, nas posições
entre início e antes de fim.
Opcionalmente, insere novos elementos, no lugar dos removidos.
Modifica o array original! (não retorna um novo array).
var pratos = [ 'Pizza', 'Chocolate', 'Lasanha', 'Feijoada' ];
pratos.splice(1,2, 'Feijão', 'Arroz');
document.write(pratos);
Pizza,Feijão,Arroz,Feijoada
Modifica o array, adicionando elementos ao
seu final.
Retorna o novo tamanho do array.
Não mescla novos arrays acrescentados.
var pratos = [ 'Pizza', 'Chocolate', 'Lasanha', 'Feijoada' ];
var x = pratos.push('Feijão', 'Arroz');
document.write( x + ' itens: ' + pratos);
6 itens: Pizza,Chocolate,Lasanha,Feijoada, Feijão,Arroz
var pratos = [ 'Pizza', 'Chocolate', 'Lasanha', 'Feijoada' ];
var ultimo = pratos.pop();
document.write(ultimo + "<br>\n");
document.write(pratos);
Feijoada<br>
Pizza,Chocolate,Lasanha
Insere os elementos no início do array, na ordem
em que são especificados.
var pratos = [ 'Pizza', 'Chocolate', 'Lasanha', 'Feijoada' ];
pratos.unshift('Arroz', 'Batata', 'Cebola');
document.write(pratos);
Arroz,Batata,Cebola,Pizza,Chocolate,Lasanha,Feijoada
shift()
Remove o primeiro elemento e o retorna.
var pratos = [ 'Pizza', 'Chocolate', 'Lasanha', 'Feijoada' ];
var primeiro = pratos.shift();
document.write(primeiro + "<br>\n");
document.write(pratos);
Pizza<br>
Chocolate,Lasanha,Feijoada
Em Javascript, um array pode conter elementos de qualquer tipo, inclusive outros arrays.
Arrays que contém outros arrays podem ser visualizados como matrizes.
Podem ser usados para armazenar séries de dados que ocupam mais de uma dimensão.
var familia = [
[ "Fred", "Barney" ],
[ "George", "Jane", "Elroy" ],
[ "Homer", "Marge", "Bart" ],
];
document.write(
familia[1][2] + ', ' + familia[2][0]
);
Elroy, Homer
Arrays podem conter objetos de qualquer tipo, não apenas outros arrays.
Objetos também podem conter outros objetos e arrays.
É possível usar várias combinações de objetos e arrays, para organizar seus dados de maneira hierárquica.
familia = [ { pai : 'Fred', amigo : 'Barney'},
{ 'pai' : 'george, 'mae' : 'Jane', filho: 'Elroy'},
{ pai : 'Homer', mae : 'Marge', filho : 'Bart} ];
document.write( familia[1].mae + ', ' familia[2].filho );
Para percorrer estruturas hierárquicas, basta utilizar combinações de loops for ou for/in.
Exemplo (Objeto com Objetos):
for(nomefam in familia){
document.write(
"<h3>" + nomefam + "</h3>"
);
for(membro in familia[nomefam])
document.write(
"<strong>" + membro+ "</strong> " +
familia[nomefam][membro] + "<br>"
); }