JavaScript - Marx Gomes Van der Linden
Transcrição
JavaScript - Marx Gomes Van der Linden
JavaScript Objetos e Arrays Ferramentas para Internet Marx Gomes Van der Linden Objetos Javascript define um tipo especial de variável chamado Objeto. Objetos não pertencem a classes explicitamente definidas. Um objeto em Javascript é uma associação de múltiplos valores, organizados por nomes. Tipo de dados especial que contém conjuntos de dados de outros tipos. Pode ser visto como um array associativo ou lista associativa. http://marx.vanderlinden.com.br/ 2 Objetos como Listas Associativas Uma lista associativa é análoga a um dicionário. A cada chave da lista, é associado um valor. "Milho" → "Amarelo" "Arroz" → "Branco" "Limão" → "Verde http://marx.vanderlinden.com.br/ 3 Objetos como Listas Associativas 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'; http://marx.vanderlinden.com.br/ 4 Objetos como Listas Associativas A mesma sintaxe é usada para recuperar os elementos do objeto: document.write(cores['milho']); Saída: Amarelo http://marx.vanderlinden.com.br/ 5 Objetos como Listas Associativas A mesma variável pode, em diferentes momentos, representar diferentes tipos de valores, inclusive outros objetos. var valor = {}; valor['teste'] = 385; valor['blabla'] = 'Meu texto'; document.write( valor['teste'] + "<br>\n" ); valor = 50.3; document.write(valor); 385<br> 50.3 http://marx.vanderlinden.com.br/ 6 Criando um Objeto É possível criar todos as propriedades de um objeto em uma única instrução: var computers = { 'trs-80' : 'Radio Shack', 2600 : 'Atari', 'adam' : 'Coleco' }; document.write( computers['adam'] + ', ' + computers[2600] ); Coleco, Atari http://marx.vanderlinden.com.br/ 7 Objetos 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'] ); Coleco, Atari, http://marx.vanderlinden.com.br/ Apple 8 Objetos É possível utilizar uma sintaxe alternativa (mais comum) para acessar alguns elementos de um objeto. objeto['nome'] → objeto.nome 'nome' deve seguir a convenção para nomenclatura de variáveis: Iniciar com letra Não ter espaços ou caracteres especiais http://marx.vanderlinden.com.br/ 9 Objetos Exemplos: document.write( computers['mac'] ); // Apple document.write( computers.mac ); // Apple document.write( computers['2600']); // Atari document.write( computers[2600]); // Atari document.write( computers.2600); // Erro! http://marx.vanderlinden.com.br/ 10 Objetos 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"]); GNU Linux Windowshttp://marx.vanderlinden.com.br/ Mac OS X 11 for/in 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: for(tmpvar in objeto) Percorre o objeto X vezes, onde X = número de propriedades do objeto. A cada iteração, assumem os valores: tmpvar → nome da propriedade atual objeto[tmpvar] → valor da http://marx.vanderlinden.com.br/ 12 propriedade atual for/in var sistemas = { stallman : 'GNU', 'linus' : "Linux" }; sistemas.apple = 'Mac OS X'; sistemas["microsoft"] = 'Windows'; for (var x in sistemas) { document.write( x + ': ' + sistemas[x] + ' | ' ); } stallman: GNU | linus: Linux | apple: Mac OS http://marx.vanderlinden.com.br/ 13 X | microsoft: Windows | Atenção: var sistemas = { stallman : 'GNU', 'linus' : "Linux" }; sistemas.apple = 'Mac OS X'; sistemas["microsoft"] = 'Windows'; for (var x in sistemas) { document.write( x + ': ' + sistemas.x + ' | ' ); Erro! } stallman: GNU | linus: Linux | apple: Mac OS http://marx.vanderlinden.com.br/ 14 X | microsoft: Windows | Objetos 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"; http://marx.vanderlinden.com.br/ 15 Objetos 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>"); http://marx.vanderlinden.com.br/ 16 Objetos http://marx.vanderlinden.com.br/ 17 Arrays Um objeto pode ser tratado como um array, que armazena uma lista seqüencial de valores. Os elementos de um array podem ser de qualquer tipo. Para criar um objeto como um array, basta usar a sintaxe []: var vazio = []; var primos = [2, 3, 5, 7, 11]; var outros = [ 1.1, true, "a" ]; http://marx.vanderlinden.com.br/ 18 Arrays 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. http://marx.vanderlinden.com.br/ 19 Arrays A sintaxe [] também para recuperar elementos do array, a partir do índice. var pratos = ['Pizza', 'Chocolate', 'Lasanha', 'Feijoada']; document.write( "Eu quero " + pratos[2] + " com " + pratos[3] + "." ); Eu quero Lasanha com Feijoada. http://marx.vanderlinden.com.br/ 20 Tamanho do array Todo array tem uma propriedade length, que armazena o seu tamanho. 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] + ' '); Eu quero 4 pratos: Pizza Chocolate Lasanha http://marx.vanderlinden.com.br/ 21 Feijoada Exibindo o array Também é possível escrever na tela o array diretamente: var pratos = ['Pizza', 'Chocolate', 'Lasanha', 'Feijoada']; document.write( "Eu quero " + pratos.length + " pratos: "); document.write(pratos); Eu quero 4 pratos: Pizza,Chocolate,Lasanha,Feijoada http://marx.vanderlinden.com.br/ 22 Modificando o array 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] + ' '); pratos[3] = 'Salada'; pratos[5] = 'Macarrão'; document.write('<br>'); document.write("Eu quero " + pratos.length + " pratos: "); for(var i=0; i<pratos.length; http://marx.vanderlinden.com.br/ i++) 23 document.write(pratos[i] + ' '); Saída Eu quero 4 pratos: Pizza Chocolate Lasanha Feijoada Eu quero 6 pratos: Pizza Chocolate Lasanha Salada undefined Macarrão http://marx.vanderlinden.com.br/ 24 Encurtando o array 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] + ' '); pratos.length = 2; document.write('<br>'); document.write("Eu quero " + pratos.length + " pratos: "); for(var i=0; i<pratos.length; http://marx.vanderlinden.com.br/ i++) 25 document.write(pratos[i] + ' '); Saída Eu quero 4 pratos: Pizza Chocolate Lasanha Feijoada Eu quero 2 pratos: Pizza Chocolate http://marx.vanderlinden.com.br/ 26 Aumentando o array 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] + ' '); pratos.length = 6; document.write('<br>'); document.write("Eu quero " + pratos.length + " pratos: "); for(var i=0; i<pratos.length; http://marx.vanderlinden.com.br/ i++) 27 document.write(pratos[i] + ' '); Saída Eu quero 4 pratos: Pizza Chocolate Lasanha Feijoada Eu quero 6 pratos: Pizza Chocolate Lasanha Feijoada undefined undefined http://marx.vanderlinden.com.br/ 28 Arrays Arrays em Javascript são dinâmicos. Redimensionamento automático: O array cresce para acomodar novos elementos que lhe são atribuídos. O comprimento do array (length) pode ser modificado diretamente em tempo de execução. Elementos não inicializados recebem o valor undefined. http://marx.vanderlinden.com.br/ 29 Arrays e Objetos 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. http://marx.vanderlinden.com.br/ 30 Arrays e Objetos pratos = [ 'Pizza', 'Chocolate', 'Lasanha', 'Feijoada' ]; pratos['extra'] = 'Surpresa do dia'; document.write("Eu quero " + pratos.length + " pratos: "); for(var i=0; i<pratos.length; i++) document.write(pratos[i] + ' '); document.write(pratos['extra']); Eu quero 4 pratos: Pizza Chocolate Lasanha Feijoada Surpresahttp://marx.vanderlinden.com.br/ do dia 31 Arrays e Objetos pratos = [ 'Pizza', 'Chocolate', 'Lasanha', 'Feijoada' ]; pratos['extra'] = 'Surpresa do dia'; pratos['6'] = 'Salada'; pratos[0.5] = 'Promoção'; pratos[true] = 'Molho'; document.write( "Eu quero " + pratos.length + " pratos: " ); for(var i=0; i<pratos.length; i++) document.write( pratos[i] + ' ' ); document.write( '<br>' ); document.write( pratos.extra http://marx.vanderlinden.com.br/ + ', ' + pratos[0.5] + ', ' + pratos[true] ); 32 Saída Eu quero 7 pratos: Pizza Chocolate Lasanha Feijoada undefined undefined Salada Surpresa do dia, Promoção, Molho http://marx.vanderlinden.com.br/ 33 Strings como arrays Em Javascript, um string pode ser tratado como um array de caracteres, apenas para leitura. var pais = "Brasil"; pais[3] = 'z'; document.write( pais.length + ' ' + pais[2] + ' ' + pais ); 6 a Brasil http://marx.vanderlinden.com.br/ 34 for/in Em um array, a estrutura for/in recupera tanto as propriedades do objeto, quanto os índices do array. http://marx.vanderlinden.com.br/ 35 for/in 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>' ); http://marx.vanderlinden.com.br/ document.write("</ul>"); 36 Saída Conteúdo do objeto: ● 0: Pizza ● 1: Chocolate ● 2: Lasanha ● 3: Feijoada ● extra: Surpresa do dia ● 6: Salada ● 0.5: Promoção ● true: Molho http://marx.vanderlinden.com.br/ 37 delete 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]; http://marx.vanderlinden.com.br/ 38 Excluindo elementos delete pratos[2]; delete pratos.extra; Conteúdo do objeto: Conteúdo do objeto: ● 0: Pizza ● 0: Pizza ● 1: Chocolate ● 1: Chocolate ● 2: Lasanha ● 3: Feijoada ● 3: Feijoada ● 6: Salada ● extra: Surpresa do dia ● 0.5: Promoção ● 6: Salada ● true: Molho ● 0.5: Promoção ● true: Molho http://marx.vanderlinden.com.br/ 39 Métodos Um método é uma função associada a um objeto. Ex.: document.write("Hello, World!") Javascript define alguns métodos que podem ser utilizados em arrays: join splice reverse push sort pop concat shif slice unshift http://marx.vanderlinden.com.br/ 40 join() join([separador]) Retorna a concatenação de todos os elementos do array, intercalados com o separador. Se o separador não for especificado, usase ','. var pratos = [ 'Pizza', 'Chocolate', 'Lasanha', 'Feijoada' ]; document.write( pratos.join('; ') ); Pizza; Chocolate; http://marx.vanderlinden.com.br/ Lasanha; Feijoada 41 reverse() reverse() Inverte a ordem os elementos do array. var pratos = [ 'Pizza', 'Chocolate', 'Lasanha', 'Feijoada' ]; pratos.reverse(); document.write( pratos.join('; ') ); Feijoada; Lasanha; Chocolate; Pizza http://marx.vanderlinden.com.br/ 42 sort() sort() Ordena os elementos do array alfabeticamente. var pratos = [ 'Pizza', 'Chocolate', 'Lasanha', 'Feijoada' ]; pratos.sort(); document.write( pratos.join('; ') ); Chocolate; Feijoada; Lasanha; Pizza http://marx.vanderlinden.com.br/ 43 concat() concat(elemento+) Retorna um novo array, composto pela concatenação do array original com todos os argumentos. var pratos = [ 'Pizza', 'Chocolate', 'Lasanha', 'Feijoada' ]; var novospratos = pratos.concat( 'Salada', 'Macarrão' ); document.write( novospratos ); Pizza,Chocolate,Lasanha,Feijoada,Salada, Macarrão http://marx.vanderlinden.com.br/ 44 concat() Arrays adicionados com concat() são mesclados ao original. var pratos = [ 'Pizza', 'Chocolate', 'Lasanha', 'Feijoada' ]; var vegetais = [ 'Tomate', 'Cenoura', 'Pimentão' ]; var novospratos = pratos.concat( vegetais, ['Feijão', 'Arroz'], 'Frango' ); document.write( novospratos ); Pizza,Chocolate,Lasanha,Feijoada,Tomate,Ceno http://marx.vanderlinden.com.br/ 45 ura,Pimentão,Feijão,Arroz,Frango slice() slice(início,[fim]) Retorna um novo array contendo os elementos do array original a partir de início, até antes do fim. Se fim for omitido, usa-se o último elemento. Números negativos podem ser usados em ambos os argumentos, significando uma contagem a partir do final do array. http://marx.vanderlinden.com.br/ 46 slice() 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> http://marx.vanderlinden.com.br/ 47 splice() splice(início, [fim], [elemento+]) 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). http://marx.vanderlinden.com.br/ 48 splice() var pratos = [ 'Pizza', 'Chocolate', 'Lasanha', 'Feijoada' ]; pratos.splice(1,2, 'Feijão', 'Arroz'); document.write(pratos); Pizza,Feijão,Arroz,Feijoada http://marx.vanderlinden.com.br/ 49 push() push(elemento+) 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, http://marx.vanderlinden.com.br/ Feijão,Arroz 50 concat() vs. push() var pratos = [ 'Pizza', 'Chocolate', 'Lasanha', 'Feijoada' ]; var fj = ['Feijão', 'Arroz']; pratos2 = pratos.concat(fj); var t1 = pratos2.length; var t2 = pratos.push(fj); document.write( t2 + ' itens: ' + pratos.join('| ') + "<br>\n" ); document.write( t1 + ' itens: ' http://marx.vanderlinden.com.br/ + pratos2.join('| ') ); 51 concat() vs. push() Saída: 5 itens: Pizza| Chocolate| Lasanha| Feijoada| Feijão,Arroz 6 itens: Pizza| Chocolate| Lasanha| Feijoada| Feijão| Arroz http://marx.vanderlinden.com.br/ 52 pop() pop() Remove o último elemento do array e o retorna. var pratos = [ 'Pizza', 'Chocolate', 'Lasanha', 'Feijoada' ]; var ultimo = pratos.pop(); document.write(ultimo + "<br>\n"); document.write(pratos); Feijoada<br> Pizza,Chocolate,Lasanha http://marx.vanderlinden.com.br/ 53 unshift() unshift(elemento+) Insere os elementos no início do array, na ordem em que são especificados. var pratos = [ 'Pizza', 'Chocolate', 'Lasanha', 'Feijoada' ]; pratos.unshift('Batata frita'); document.write(pratos); http://marx.vanderlinden.com.br/ 54 unshift() 1 var pratos = [ 'Pizza', 'Chocolate', 'Lasanha', 'Feijoada' ]; pratos.unshift('Arroz', 'Batata', 'Cebola'); document.write(pratos); 2 var pratos = [ 'Pizza', 'Chocolate', 'Lasanha', 'Feijoada' ]; pratos.unshift('Arroz'); pratos.unshift('Batata'); pratos.unshift('Cebola'); document.write(pratos); http://marx.vanderlinden.com.br/ 55 unshift() 1 Arroz,Batata,Cebola,Pizza,Chocolate,Lasanha, Feijoada 2 Cebola,Batata,Arroz,Pizza,Chocolate,Lasanha, Feijoada http://marx.vanderlinden.com.br/ 56 shift() 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 http://marx.vanderlinden.com.br/ 57 Arrays Multidimensionais 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. http://marx.vanderlinden.com.br/ 58 Matrizes var [ [ [ ]; familia = "Fred", "George", "Homer", [ "Barney" ], "Jane", "Elroy" ], "Marge", "Bart" ], document.write( familia[1][2] + ', ' + familia[2][0] ); Saída: Elroy, Homer http://marx.vanderlinden.com.br/ 59 Acrescentando Elementos var [ [ [ ]; familia = "Fred", "George", "Homer", [ "Barney" ], "Jane", "Elroy" ], "Marge", "Bart" ], familia[0][2] = "Wilma"; //familia[3][2] = "Erro!"; document.write( familia[1][2] + ', ' + familia[2][0] + ', ' + familia[0][2] ); Elroy, Homer, Wilma http://marx.vanderlinden.com.br/ 60 Objetos e Arrays 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. http://marx.vanderlinden.com.br/ 61 Array de Objetos familia = [ { pai amigo }, { 'pai' 'mae' 'filho' }, { pai mae filho } ]; : 'Fred', : 'Barney' : 'George', : 'Jane', : 'Elroy' : 'Homer', : 'Marge', : 'Bart' document.write( familia[1].mae + ', ' + http://marx.vanderlinden.com.br/ familia[2].filho ); 62 Objeto com Objetos familia = { 'Flintstones' : { pai : 'Fred', amigo : 'Barney' }, 'Jetsons' : { 'pai' : 'George', 'mae' : 'Jane', 'filho' : 'Elroy' }, 'Simpsons' : { pai : 'Homer', mae : 'Marge', filho : 'Bart' } }; document.write( familia.Jetsons.mae + ', ' 63+ http://marx.vanderlinden.com.br/ familia.Simpsons.filho ); Objeto com Arrays familia = { 'Flintstones' : [ 'Fred', 'Barney' ], 'Jetsons' : [ 'George', 'Jane', 'Elroy' ], 'Simpsons' : [ 'Homer', 'Marge', 'Bart' ] }; document.write( familia.Jetsons[1] + ', ' + familia.Simpsons[2] ); http://marx.vanderlinden.com.br/ 64 Percorrendo a Estrutura Hierárquica 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>" ); http://marx.vanderlinden.com.br/ 65 } Percorrendo a Estrutura Hierárquica http://marx.vanderlinden.com.br/ 66