#javascript
#javascript
Вопрос:
Я новичок в javascript. У меня проблема с превращением объекта со строковыми значениями в значения числа.
Например, это объект, который у меня есть:
{ _redis: '3', _mysql: '2', _nodejs: '5', _mongo: '4', _python: '3' }
Я хочу получить объект с числами, а не с такими строками:
{ _redis: 3, _mysql: 2, _nodejs: 5, _mongo: 4, _python: 3 }
Это функция, которую я сделал, но у меня она не работает, я не понимаю почему.
function convertObjectWithStrToNumber (engineerDetails) {
let engineerDetailsWithNumbers = {};
engineerDetailsWithNumbers = Object.keys(engineerDetails).map(([key, value]) => ([key, Number(value)]));
return engineerDetailsWithNumbers;
}
let engineer = { _redis: '3', _mysql: '2', _nodejs: '5', _mongo: '4', _python: '3' };
console.log(convertObjectWithStrToNumber(engineer));
Когда я запускаю функцию, я получаю эту ошибку:
[
[ '_', NaN ],
[ '_', NaN ],
[ '_', NaN ],
[ '_', NaN ],
[ '_', NaN ]
]
Я не понимаю, в чем проблема, я превратил объект в массив, и после этого я прошел через все члены, и вместо строковых значений я дал им значения числа.
Комментарии:
1.
Object.entries
вместоObject.keys
.
Ответ №1:
Object.keys
выдает массив ключей. Деструктурирование [key, value]
из ключа — строки — даст вам не ключ и значение, а первый символ и второй символ.
Используйте Object.entries
вместо этого и превратите массив сопоставленных записей обратно в объект с Object.fromEntries
:
function convertObjectWithStrToNumber(engineerDetails) {
return Object.fromEntries(
Object.entries(engineerDetails).map(
([key, value]) => [key, Number(value)]
)
);
}
let engineer = {
_redis: '3',
_mysql: '2',
_nodejs: '5',
_mongo: '4',
_python: '3'
};
console.log(convertObjectWithStrToNumber(engineer));
Комментарии:
1. Большое вам спасибо за помощь, я получаю объект с «» вокруг его свойств, как я могу его удалить?
2. Ключи не содержат
'
s, это просто визуальные разделители.
Ответ №2:
Попробуйте это:
function convertObjectWithStrToNumber (engineerDetails) {
const engineerDetailsWithNumbers = {}
for (const [key, value] of Object.entries(engineerDetails)) {
engineerDetailsWithNumbers[key] = Number(value)
}
return engineerDetailsWithNumbers;
}
let engineer = { _redis: '3', _mysql: '2', _nodejs: '5', _mongo: '4', _python: '3' };
console.log(convertObjectWithStrToNumber(engineer));
Я думаю, что ваш поиск был неправильным (значение)
Ответ №3:
Требуется ли вам создавать свою собственную функцию? Вы можете использовать parseInt();
функцию, чтобы сделать это намного проще. parseInt();
требуется, чтобы строка была проанализирована, и необязательный параметр, который указывает, какая система счисления будет использоваться.