Como faço pra saber as chaves de um array (javascript)???

1,671 views
Skip to first unread message

Leonardo Machado Carreiro

unread,
Feb 9, 2007, 1:01:12 PM2/9/07
to ar...@googlegroups.com
eu precisava de algo semelhante ao foreach do php

eu tenho um array
...['xxx1'] = 'yyy1';
...['xxx2'] = 'yyy2';
...['xxx3'] = 'yyy3';
...['xxx4'] = 'yyy4';


e eu precisava montar uma string...

<option value="xxx1">yyy1</option>
<option value="xxx2">yyy2</option>
<option value="xxx3">yyy3</option>
<option value="xxx4">yyy4</option>


não to querendo que alguém faça isso pra mim, eu só gostaria de saber qual função do javascript pode me ajudar...

alguém sabe???

leandro n. camargo

unread,
Feb 9, 2007, 1:06:50 PM2/9/07
to ar...@googlegroups.com
Ok.
Vamos por partes.
Quando você tem um array sociativo no JavaScript ele deixe de ser array.
Na verdade isso é um objeto (ou hash se preferir).
Quando você tem:
a['abc'] = 1;
a['bdf'] = 2;
a['cdf'] = 3;
na verdade você tem:
a = {abc: 1, bdf: 2, cdf: 3}
ou ainda:
a.abc = 1;
a.bdf = 2;
a.cdf = 3;

Tendo essa informação em mente para você pegar essas key basta fazê-lo
da mesma forma que se faz com para percorrer qualquer outro objeto
dentro do JavaScript: com *for in*.
var a = {abc: 1, bdf: 2, cdf: 3};
for(k in a) alert(k);

Lembrando que o *in statement* não funciona no IEca 5.0 e inferiores.
E cuidado com os protótipos indesejados nos seus objetos nativos.

Nando Vieira

unread,
Feb 9, 2007, 1:07:18 PM2/9/07
to ar...@googlegroups.com
On 2/9/07, Leonardo Machado Carreiro <leo2...@gmail.com> wrote:
> eu precisava de algo semelhante ao foreach do php
>
> eu tenho um array
> ...['xxx1'] = 'yyy1';
> ...['xxx2'] = 'yyy2';
> ...['xxx3'] = 'yyy3';
> ...['xxx4'] = 'yyy4';


var ar = [];
ar['a'] = 1;
ar['b'] = 2;

for (var i in ar) {
alert(i + ', ' + ar[i]);
}

Abraços.

--
Nando Vieira
bloggin' @ http://simplesideias.com.br
money @ http://spesa.com.br

Nando Vieira

unread,
Feb 9, 2007, 1:09:44 PM2/9/07
to ar...@googlegroups.com
On 2/9/07, leandro n. camargo <leand...@gmail.com> wrote:
> Ok.
> Vamos por partes.
> Quando você tem um array sociativo no JavaScript ele deixe de ser array.
> Na verdade isso é um objeto (ou hash se preferir).
> Quando você tem:
> a['abc'] = 1;
> a['bdf'] = 2;
> a['cdf'] = 3;
> na verdade você tem:
> a = {abc: 1, bdf: 2, cdf: 3}
> ou ainda:

Não é verdade. Você só pode acessar como atributo se declarar como um hash.
Se declarar como um array, deve acessar como array.

var a = [];
var o = {};

a.teste = 'foo'; // erro
o.teste = 'bar'; // vai de boa

Os métodos são outros.

o.push('a'); // erro

Leonardo Machado Carreiro

unread,
Feb 9, 2007, 1:10:19 PM2/9/07
to ar...@googlegroups.com
era disso mesmo que eu precisava...

valew!!

Em 09/02/07, Nando Vieira <fnando...@gmail.com> escreveu:

leandro n. camargo

unread,
Feb 9, 2007, 1:13:43 PM2/9/07
to ar...@googlegroups.com
On 2/9/07, Nando Vieira <fnando...@gmail.com> wrote:
> Não é verdade. Você só pode acessar como atributo se declarar como um hash.
> Se declarar como um array, deve acessar como array.
>
> var a = [];
> var o = {};
>
> a.teste = 'foo'; // erro
> o.teste = 'bar'; // vai de boa

Teste você mesmo se [].teste = 123 não funciona.
Funciona beleza. Arrays associativos no JS não existe. Se você fizer:
a.teste = 'foo' aí no seu caso funciona sim.

Nelson Martins Neto

unread,
Feb 9, 2007, 1:19:47 PM2/9/07
to ar...@googlegroups.com
Cara, usa o For..IN do java script, tem um exemplo aqui.
http://www.w3schools.com/js/js_loop_for_in.asp

[]s
Nelson

On 2/9/07, leandro n. camargo <leand...@gmail.com> wrote:

Nando Vieira

unread,
Feb 9, 2007, 1:23:40 PM2/9/07
to ar...@googlegroups.com
On 2/9/07, leandro n. camargo <leand...@gmail.com> wrote:
> Teste você mesmo se [].teste = 123 não funciona.
> Funciona beleza. Arrays associativos no JS não existe. Se você fizer:
> a.teste = 'foo' aí no seu caso funciona sim.

Ok. Funciona.

Mas existem arrays associativos e objetos em javascript, sim.

Testado no Firebug.

a = [];
b = {};

a.foo = 'bar';
b.foo = 'bar';

a.constructor; // retorna Array()
b.constructor; //retorna Object()

;)

Abraço!

Nelson Martins Neto

unread,
Feb 9, 2007, 1:24:21 PM2/9/07
to ar...@googlegroups.com
Complementando...
O for..in faz um for pelos atributos de um objeto, ou no caso de um array pelo suas chaves.
por exemplo
var teste = new Array();
teste[0] =  'bah';
for (a in teste) {
   .... -> A variavel 'a' nesse ponto vai ser 0 (ou qualquer outro texto que vc use como chave) e o teste[a] vai ser 'bah'.
}

[]s
Nelson

leandro n. camargo

unread,
Feb 9, 2007, 1:29:11 PM2/9/07
to ar...@googlegroups.com
On 2/9/07, Nando Vieira <fnando...@gmail.com> wrote:
>
> On 2/9/07, leandro n. camargo <leand...@gmail.com> wrote:
> > Teste você mesmo se [].teste = 123 não funciona.
> > Funciona beleza. Arrays associativos no JS não existe. Se você fizer:
> > a.teste = 'foo' aí no seu caso funciona sim.
>
> Ok. Funciona.
>
> Mas existem arrays associativos e objetos em javascript, sim.
>
> Testado no Firebug.
>
> a = [];
> b = {};
>
> a.foo = 'bar';
> b.foo = 'bar';
>
> a.constructor; // retorna Array()
> b.constructor; //retorna Object()

Claro que que ele vai continuar sendo instancia do Array.
O fato de você ter adicionado um propriedade a ele não muda esse fato.
Mas o que você está fazendo aí em cima não é adicionando elementos com
indices associativos e sim adicionando propriedades à instancia do
objeto Array.
É diferente, entendeu?

Jonas Raoni

unread,
Feb 9, 2007, 1:39:27 PM2/9/07
to ar...@googlegroups.com
On 2/9/07, Nando Vieira <fnando...@gmail.com> wrote:
> Mas existem arrays associativos e objetos em javascript, sim.
>
> Testado no Firebug.
>
> a = [];
> b = {};
>
> a.foo = 'bar';
> b.foo = 'bar';
>
> a.constructor; // retorna Array()
> b.constructor; //retorna Object()

Ah, não é array associativo. Tem gente que diz que o javascript não
tem array associativo pq falta muitas propriedades que são encontradas
numa lista associativa, mas como tem um zilhão de implementações
diferentes, eu nem concordo muito com essa idéia... Mas Array é só um
objeto extendido =]

alert([] instanceof Object);
alert([] instanceof Array);

Se me lembro bem como o "watch" funciona, dava até pra simular o
comportamento do array com um objeto simples =b


--
Jonas Raoni Soares Silva
http://www.jsfromhell.com

Reply all
Reply to author
Forward
0 new messages