Underscore: _.keys, всегда возвращающие строки

Созданный на 6 февр. 2013  ·  5Комментарии  ·  Источник: jashkenas/underscore

_.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);

Все 5 Комментарий

Ключи всегда струны.

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; });
Была ли эта страница полезной?
0 / 5 - 0 рейтинги