_.keys({111: 222, 333: 444})
возвращает ["111", "333"]
, но ожидалось [111, 333]
.
Также влияет на другие функции, такие как _.pairs: _.pairs({1: 1})`returns`[["1", 1]]`, but expected`[[1, 1]]
.
Спасибо!
Ключи всегда струны.
var obj = {};
obj[1] = 1;
for (var key in obj) console.log(typeof key); // string
Вы можете найти ключ '1'
с помощью obj[1]
или obj['1']
для удобства, а не потому, что ключ является числом.
Если вы хотите, чтобы ключи были цифрами, попробуйте
var obj = {};
obj[1] = 1;
_.map(_.keys(obj), Number);
Привет @marcalj! Возвращение имен свойств в виде строк является частью спецификации . Если вам нужны числа, решение @caseywebdev ,
Ой, понятно, спасибо за быстрый ответ! Ты жжешь!!
Я использовал parseInt(number, 10)
но Number
более чистый;)
Спасибо еще раз!
Решение @caseywebdev не будет работать, если у вас смешанные ключевые объекты. например {"asdf": 123, 1: 1234} Я понимаю, что вы сказали "большинство" случаев, я просто указывал, когда это не сработает.
@johnymonster со смешанными ключами, его можно изменить на
_.map(_.keys(obj), function (key) { return isNaN(+key) ? key : +key; });
Самый полезный комментарий
Ключи всегда струны.
Вы можете найти ключ
'1'
с помощьюobj[1]
илиobj['1']
для удобства, а не потому, что ключ является числом.Если вы хотите, чтобы ключи были цифрами, попробуйте