Когда я меняю значения объекта на число из текста, я получаю ошибку nan в javascript

#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(); требуется, чтобы строка была проанализирована, и необязательный параметр, который указывает, какая система счисления будет использоваться.