Underscore: _.keys retornando sempre strings

Criado em 6 fev. 2013  ·  5Comentários  ·  Fonte: jashkenas/underscore

_.keys({111: 222, 333: 444}) retorna ["111", "333"] , mas é esperado [111, 333] .
Também afeta outras funções como _.pairs: _.pairs({1: 1})`returns`[["1", 1]]`, but expected`[[1, 1]] .

Obrigado!

invalid

Comentários muito úteis

As chaves são sempre strings.

var obj = {};
obj[1] = 1;
for (var key in obj) console.log(typeof key); // string

Você pode procurar a chave '1' com obj[1] ou obj['1'] como uma conveniência, não porque a chave seja um número.

Se você quiser as chaves como números, tente

var obj = {};
obj[1] = 1;
_.map(_.keys(obj), Number);

Todos 5 comentários

As chaves são sempre strings.

var obj = {};
obj[1] = 1;
for (var key in obj) console.log(typeof key); // string

Você pode procurar a chave '1' com obj[1] ou obj['1'] como uma conveniência, não porque a chave seja um número.

Se você quiser as chaves como números, tente

var obj = {};
obj[1] = 1;
_.map(_.keys(obj), Number);

Oi @marcalj! Retornar nomes de propriedades como strings faz parte da especificação . Se você precisar de números, a solução de @caseywebdev acima funcionará na maioria dos casos.

Ouch entendo, obrigado pela resposta rápida! Você é demais!!
Eu estava usando parseInt(number, 10) mas usar Number é mais limpo;)

Obrigado novamente!

A solução

@johnymonster com chaves mistas, pode ser modificado para

_.map(_.keys(obj), function (key) { return isNaN(+key) ? key : +key; });
Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

xiaoliwang picture xiaoliwang  ·  3Comentários

arypbatista picture arypbatista  ·  3Comentários

zackschuster picture zackschuster  ·  5Comentários

haggholm picture haggholm  ·  8Comentários

danilopolani picture danilopolani  ·  5Comentários