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 dicionário? ie eu quero
var keys = ["cats", "dogs"];
Edite 7 anos depois: Apenas para corrigir a terminologia - não existe uma 'matriz associativa' em Javascript - isso é tecnicamente apenas um object
e são as chaves de objeto que queremos.
javascript
arrays
Simon_Weaver
fonte
fonte
Respostas:
Você pode usar:
Object.keys(obj)
Exemplo:
Consulte a referência abaixo para suporte ao navegador. É suportado no Firefox 4.20, Chrome 5, IE9. O link abaixo contém um trecho de código que você pode adicionar se
Object.keys()
não houver suporte no seu navegador.https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys
fonte
Tente o seguinte:
hasOwnProperty
é necessário porque é possível inserir chaves no objeto protótipo dedictionary
. Mas você normalmente não deseja que essas chaves sejam incluídas na sua lista.Por exemplo, se você fizer isso:
e depois faça um
for...in
loopdictionary
, você obteráa
eb
, mas também obterác
.fonte
keys.push(key);
. Você está apenas puxando (e assim declarando) do espaço para nome global. :)É a declaração for..in .
fonte
dictionary.hasOwnProperty(key)
caso contrário você pode acabar com métodos da cadeia de protótipos ..Apenas uma observação rápida, tenha cuidado ao usar for..in se você usar uma biblioteca (jQuery, protótipo etc.), pois a maioria deles adiciona métodos aos objetos criados (incluindo dicionários).
Isso significa que, quando você fizer um loop sobre eles, os nomes dos métodos aparecerão como chaves. Se você estiver usando uma biblioteca, consulte a documentação e procure uma seção enumerável, onde encontrará os métodos certos para a iteração de seus objetos.
fonte
Maneira JQUERY simples.
É isso que eu uso
DictionaryObj, sendo o objeto de dicionário javascript que você deseja passar. chave, é claro que os nomes deles estão no dicionário.
fonte
Atualmente, estou usando a resposta de Rob de la Cruz
e em um arquivo carregado no início, tenho algumas linhas de código emprestadas de outras partes da Internet que cobrem o caso de versões antigas de interpretadores de script que não possuem Object.keys embutidas.
Eu acho que esse é o melhor dos dois mundos para grandes projetos: código moderno simples e suporte compatível com versões anteriores de versões antigas de navegadores etc.
Efetivamente, coloca a solução de JW na função quando Object.keys (obj) de Rob de la Cruz não está disponível nativamente.
fonte