Underscore: _.keys devolviendo siempre cadenas

Creado en 6 feb. 2013  ·  5Comentarios  ·  Fuente: jashkenas/underscore

_.keys({111: 222, 333: 444}) devuelve ["111", "333"] , pero se esperaba [111, 333] .
También afecta a otras funciones como _.pairs: _.pairs({1: 1})`returns`[["1", 1]]`, but expected`[[1, 1]] .

¡Gracias!

invalid

Comentario más útil

Las claves son siempre cadenas.

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

Puede buscar la clave '1' con obj[1] o obj['1'] para su conveniencia, no porque la clave sea un número.

Si quiere las claves como números, intente

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

Todos 5 comentarios

Las claves son siempre cadenas.

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

Puede buscar la clave '1' con obj[1] o obj['1'] para su conveniencia, no porque la clave sea un número.

Si quiere las claves como números, intente

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

¡Hola @marcalj! Devolver nombres de propiedad como cadenas es parte de la especificación . Si necesita números, la solución de @caseywebdev anterior funcionará en la mayoría de los casos.

¡Ay, ya veo, gracias por la rápida respuesta! ¡¡Tú Molas!!
Estaba usando parseInt(number, 10) pero usar Number es más limpio;)

¡Gracias de nuevo!

La solución

@johnymonster con claves mixtas, se puede modificar para

_.map(_.keys(obj), function (key) { return isNaN(+key) ? key : +key; });
¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

acl0056 picture acl0056  ·  5Comentarios

sky0014 picture sky0014  ·  8Comentarios

ksullivan picture ksullivan  ·  9Comentarios

arieljake picture arieljake  ·  4Comentarios

jdalton picture jdalton  ·  4Comentarios