Obtendo uma lista de chaves de matriz associativa

Eu tenho uma matriz associativa em JavaScript:

var dictionary = { "cats": [1,2,3,4,5], "dogs": [6,7,8,9,10] }; 

Como obtenho as chaves deste dictionary? ou seja, eu quero

 var keys = ["cats", "dogs"]; 

Editar 7 anos depois: apenas para obter a terminologia correta – não existe um ‘array associativo’ em Javascript – isso é tecnicamente apenas um object e são as chaves de object que queremos.

Você pode usar: Object.keys(obj)

Exemplo:

 var dictionary = { "cats": [1, 2, 37, 38, 40, 32, 33, 35, 39, 36], "dogs": [4, 5, 6, 3, 2] }; // Get the keys var keys = Object.keys(dictionary); console.log(keys); 

Tente isto:

 var keys = []; for (var key in dictionary) { if (dictionary.hasOwnProperty(key)) { keys.push(key); } } 

hasOwnProperty é necessário porque é possível inserir chaves no object de protótipo do dictionary . Mas você normalmente não quer essas chaves incluídas na sua lista.

Por exemplo, se você fizer isso:

 Object.prototype.c = 3; var dictionary = {a: 1, b: 2}; 

e então faça um for...in loop sobre o dictionary , você terá b , mas você também terá c .

 for (var key in dictionary) { // do something with key } 

É a declaração for..in .

Apenas uma nota rápida, ser cauteloso de usar for..in se você usar uma biblioteca (jQuery, protótipo, etc.), como a maioria deles adicionar methods para objects criados (incluindo dictionarys).

Isso significa que, quando você faz um loop sobre eles, os nomes dos methods aparecerão como chaves. Se você estiver usando uma biblioteca, examine a documentação e procure por uma seção enumerável, onde você encontrará os methods corretos para a iteração de seus objects.

Simples caminho JQUERY.

É isso que eu uso
DictionaryObj é o object do dictionary javascript que você deseja passar. valor, chave do curso, sendo os nomes deles no dictionary.

  $.each(DictionaryObj, function (key, value) { $("#storeDuplicationList") .append($("
  • ") .attr("value", key) .text(value)); });

    Eu estou atualmente usando a resposta de Rob de la Cruz

     Object.keys(obj) 

    e em um arquivo carregado no início eu tenho algumas linhas de código emprestadas de outro lugar na internet que cobrem o caso de versões antigas de interpretadores de script que não possuem o Object.keys embutido.

     if (!Object.keys) { Object.keys = function(object) { var keys = []; for (var o in object) { if (object.hasOwnProperty(o)) { keys.push(o); } } return keys; }; } 

    Eu acho que este é o melhor dos dois mundos para grandes projetos: código moderno simples e suporte retroativamente compatível para versões antigas de navegadores etc.

    Efetivamente, ele coloca a solução de JW na function quando Object.keys (obj) de Rob de la Cruz não está nativamente disponível.