Existe uma maneira elegante de acessar a primeira propriedade de um objeto ...
- onde você não sabe o nome de suas propriedades
- sem usar um loop como
for .. in
ou jQuery$.each
Por exemplo, preciso acessar o foo1
objeto sem saber o nome de foo1:
var example = {
foo1: { /* stuff1 */},
foo2: { /* stuff2 */},
foo3: { /* stuff3 */}
};
javascript
object
atogle
fonte
fonte
Respostas:
Usando isso, você também pode acessar outras propriedades por índices. Esteja ciente!
Object.keys
a ordem de devolução não é garantida de acordo com o ECMAScript, mas de maneira não oficial pelas principais implementações de navegadores, leia https://stackoverflow.com/a/23202095 para obter detalhes sobre isso.fonte
first()
algo semelhante pudesse lidar com isso.Experimente o
for … in
loop e quebre após a primeira iteração:fonte
Você também pode fazer
Object.values(example)[0]
.fonte
Object.keys
porque você tem a garantia de obter o primeiro item.Use
Object.keys
para obter uma matriz das propriedades em um objeto. Exemplo:Documentação e correção entre navegadores fornecidos aqui . Um exemplo de seu uso pode ser encontrado em outra das minhas respostas aqui .
Edit : para maior clareza, eu só quero repetir o que foi afirmado corretamente em outras respostas: a ordem das chaves nos objetos javascript é indefinida.
fonte
Uma versão de uma regra:
fonte
for in
sem verificar,hasOwnProperty
pois o objeto contém outros valores indesejados anexados a ele programaticamente, para que você possa obter um resultado indesejado desse snippet. Só porque é curto e limpo, não significa que é seguro ideal.Não há uma propriedade "primeira". As chaves do objeto não são ordenadas.
Se você fizer um loop sobre eles
(var foo in bar)
, obterá-os em alguma ordem, mas poderá mudar no futuro (especialmente se você adicionar ou remover outras chaves).fonte
Solução com a biblioteca lodash :
mas não há garantia da ordem de armazenamento interno das propriedades do objeto, pois depende da implementação da VM em javascript.
fonte
var object = { childIndex: { .. } }; var childObject = _.find(Object);
Não. Um literal de objeto, conforme definido pelo MDC, é:
Portanto, um literal de objeto não é uma matriz e você pode acessar apenas as propriedades usando o nome explícito ou um
for
loop usando ain
palavra - chave.fonte
A resposta superior pode gerar toda a matriz e capturar da lista. Aqui está outro atalho eficaz
fonte
Isso já foi abordado aqui antes.
O conceito de primeiro não se aplica às propriedades do objeto, e a ordem de um loop for ... in não é garantida pelas especificações, no entanto, na prática, é confiável FIFO, exceto criticamente para o chrome ( relatório de bug ). Tome suas decisões de acordo.
fonte
Eu não recomendo que você use Object.keys, pois não é suportado nas versões antigas do IE. Mas se você realmente precisar disso, poderá usar o código acima para garantir a compatibilidade com versões anteriores:
Recurso Firefox (Gecko) 4 (2.0) Chrome 5 Internet Explorer 9 Opera 12 Safari 5
Mais informações: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/keys
Mas se você precisar apenas do primeiro, poderemos organizar uma solução mais curta, como:
fonte
Para obter o primeiro nome da chave no objeto, você pode usar:
Retorna uma string, para que você não possa acessar objetos aninhados, se houver, como:
var obj = { first: { someVal : { id : 1} };
Aqui com essa solução, você não pode acessar o id.A melhor solução se você deseja obter o objeto real está usando o lodash, como:
Para retornar o valor da primeira chave (se você não souber exatamente o nome da primeira chave):
se você souber o nome da chave, use:
ou
fonte
Se você precisar acessar "a primeira propriedade de um objeto", isso pode significar que há algo errado com sua lógica. A ordem das propriedades de um objeto não deve importar.
fonte
Use uma matriz em vez de um objeto (colchetes).
Observe que você perde os identificadores 'foo'. Mas você pode adicionar uma propriedade name aos objetos contidos:
fonte
Alguma razão para não fazer isso?
fonte
.map()
só existe para iterables built-inVocê pode usar o
Object.prototype.keys
que retorna todas as chaves de um objeto na mesma ordem. Portanto, se você deseja o primeiro objeto, obtenha esse array e use o primeiro elemento como chave desejada.fonte
também podemos fazer com esse método.
fonte
Aqui está uma maneira mais limpa de obter a primeira chave:
fonte
[first]
. O usuário não solicitou uma matriz como resposta. Por que fazer isso sobre ofirst = Object.keys(example)[0]
que fará o mesmo sem precisar agrupar a resposta em uma matriz. Por que o seu é mais limpo, por favor?