Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Felipe Rex

Trabalhando com Array

Recommended Posts

Pessoal, estou tentando acessar o índice de um array cujo valor não é um inteiro e sim string, porém não estou entendendo o acesso (consegui obter o valor mas gostaria de entender o conceito por de trás). Segue o exemplo:

 

Tenho o código abaixo:

 

//Exemplo 1 - Preciso de esclarecimento do conceito desse tipo de array
listHeight = new Array({'actualHeight' : actualHeight, 'realHeight' : realHeight});


//Exemplo 2 - normal... sem problema
listHeight2 = new Array();

listHeight2['actualHeight'] = actualHeight;
listHeight2['realHeight'] = realHeight;

 

Bom o exemplo 1 é o qual gostaria de alguém me ajudasse a entender o conceito.

 

Meu entendimento: O exemplo 1 e o exemplo 2 são idênticos .. porém o acesso ao array eu nao consegui fazer da mesma forma para os dois exemplos.

 

 

Para o exemplo 1, eu não conseguir acessar a array assim:

alert(listHeight['actualHeight']);

 

somente assim deu certo:

alert(listHeight[0]['actualHeight']);

 

 

Para o exemplo 2, foi normal, acessei assim:

alert(listHeight2['actualHeight']);

 

 

A pergunta: Por que houve essa diferença para acessar o array, a declaração não foi a mesma para os dois tipos?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

A pergunta: Por que houve essa diferença para acessar o array, a declaração não foi a mesma para os dois tipos?

Não, Javascript não possui arrays associativas, que é o que você acha que criou na primeira declaração.

 

Na realidade você simplesmente criou uma array na qual o primeiro elemento é um objeto contendo as propriedades actualHeight e realHeight.

 

Se deseja algo semelhante à uma array associativa você precisa usar um Objeto.

var data = {
    item : 'value',
    item2: 'value2'
}

for ( var item in data ) {
    if ( !data.hasOwnProperty( item ) )
        continue;

    console.log( data[item] );
}

E detalhe:

//Exemplo 2 - normal... sem problema
listHeight2 = new Array();

listHeight2['actualHeight'] = actualHeight;
listHeight2['realHeight'] = realHeight;

Nãaaaaaaaaao faça isso. Você está definindo uma propriedade da instância da Array (pois em Javascript uma Array também é um Objeto) e não atribuindo um item à mesma. :thumbsup:

 

Leitura relacionada (em inglês) :seta: http://andrewdupont.net/2006/05/18/javascript-associative-arrays-considered-harmful/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado pela resposta JCMais.

 

Realmente eu estava achando que era um array associativo e nem fazia idéia que não existia no javascript (embora eu observei que nenhum sabe falava a respeito).

 

Vou dar uma lida no link informado.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só para esclarecer para mim...

 

O exemplo 2:

//Exemplo 2 - normal... sem problema
listHeight2 = new Array();

listHeight2['actualHeight'] = actualHeight;
listHeight2['realHeight'] = realHeight;

 

 

Seria correto faze-lo assim:

 

listHeight2 = {};

listHeight2['actualHeight'] = actualHeight;
listHeight2['realHeight']   = realHeight;

 

 

Neste caso, listHeight2 é um objeto... e nas linhas abaixo declara os valores para as propriedades desse objeto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Neste caso, listHeight2 é um objeto... e nas linhas abaixo declara os valores para as propriedades desse objeto?

Exato. :thumbsup:

 

Em Javascript, as propriedades de um objeto podem ser acessadas tanto usando [inline]obj.prop[/inline] quanto [inline]obj['prop'][/inline].

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.