Underscore: _.keys renvoyant toujours des chaînes

Créé le 6 févr. 2013  ·  5Commentaires  ·  Source: jashkenas/underscore

_.keys({111: 222, 333: 444}) renvoie ["111", "333"] , mais attendu [111, 333] .
Affecte également d'autres fonctions comme _.pairs : _.pairs({1: 1})`returns`[["1", 1]]`, but expected`[[1, 1]] .

Merci!

invalid

Commentaire le plus utile

Les clés sont toujours des chaînes.

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

Vous pouvez rechercher la clé '1' avec obj[1] ou obj['1'] par commodité, pas parce que la clé est un nombre.

Si vous voulez les clés sous forme de nombres, essayez

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

Tous les 5 commentaires

Les clés sont toujours des chaînes.

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

Vous pouvez rechercher la clé '1' avec obj[1] ou obj['1'] par commodité, pas parce que la clé est un nombre.

Si vous voulez les clés sous forme de nombres, essayez

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

Salut @marcalj ! Le renvoi des noms de propriété sous forme de chaînes fait partie de la spécification . Si vous avez besoin de chiffres, la solution de @caseywebdev ci-dessus fonctionnera dans la plupart des cas.

Ouch je vois, merci pour la réponse rapide! Tu gères!!
J'utilisais parseInt(number, 10) mais utiliser Number est plus propre ;)

Merci encore!

La solution

@johnymonster avec des clés mixtes, il peut être modifié pour

_.map(_.keys(obj), function (key) { return isNaN(+key) ? key : +key; });
Cette page vous a été utile?
0 / 5 - 0 notes