Gostaria de obter as chaves de um objeto JavaScript como uma matriz, em jQuery ou em JavaScript puro.
Existe uma maneira menos detalhada do que isso?
var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
for (var key in foo) {
keys.push(key);
}
javascript
ecmascript-5
Richard
fonte
fonte
if(foo.hasOwnProperty(key))
, é o que eu faria. Ou use$.map
.for var in x
laçosRespostas:
Use
Object.keys
:Esse é um recurso do ES5. Isso significa que ele funciona em todos os navegadores modernos, mas não nos navegadores herdados .
O ES5-shim possui uma implementação que
Object.keys
você pode roubarfonte
Você pode usar o jQuery
$.map
.fonte
each
, se você estiver fazendo algo com eles.$.each(foo, function(index, value){/* do something with index */});
Obviamente,
Object.keys()
é a melhor maneira de obter as chaves de um objeto. Se ele não estiver disponível no seu ambiente, ele pode ser banido trivialmente usando código como no seu exemplo (exceto que você precisa levar em consideração que seu loop iterará sobre todas as propriedades da cadeia de protótipos, diferentementeObject.keys()
do comportamento).No entanto, seu código de exemplo ...
jsFiddle .
... pode ser modificado. Você pode fazer a atribuição diretamente na parte variável .
jsFiddle .
Obviamente, esse comportamento é diferente do que
Object.keys()
realmente faz ( jsFiddle ). Você pode simplesmente usar o calço na documentação do MDN .fonte
var keys = [], i = 0; for (keys[i++] in foo) {}
+1hasOwnProperty()
cheque, com certeza?Eu não sei nada menos detalhado, mas fui inspirado a coagir o seguinte em uma linha pelo pedido de uma linha, mas não sei o quão Pythonic é;)
fonte
var enumerableKeysOnThePrototypeChain
;)for (keys[i++] in foo) {}
), porque você ainda está executandoArray.push()
(para não mencionar a declaração de uma função inteira). Uma implementação python deve confiar tanto na compreensão implícita quanto possível e, na sua falta, usando uma expressão lambda.Caso você esteja aqui procurando algo para listar as chaves de um objeto aninhado de profundidade n como uma matriz plana:
fonte
Sumário
Para obter todas as chaves de um objeto, você pode usar
Object.keys()
.Object.keys()
pega um objeto como argumento e retorna uma matriz de todas as chaves.Exemplo:
No exemplo acima, armazenamos uma matriz de chaves nas chaves const. Em seguida, podemos acessar facilmente a quantidade de propriedades no objeto, verificando o comprimento da matriz de chaves.
Obtendo os valores com:
Object.values()
A função complementar de
Object.keys()
éObject.values()
. Essa função pega um objeto como argumento e retorna uma matriz de valores. Por exemplo:fonte
Se você decidir usar o Underscore.js, é melhor fazer
fonte