Изменение свойств объекта Javascript со строки на int

У меня есть массив объектов с тремя свойствами каждый (год, всего, per_capita). Пример:

0: Object
  per_capita: "125.8"
  total: "1007.2"
  year: "2009"

Эти свойства являются строками, и я хочу создать цикл, который проходит через массив и преобразует их в int. Я попробовал следующий цикл:

for (i=0; i<data.length; i++){
    parseInt(data[i].year, 10)
    parseInt(data[i].total, 10)
    parseInt(data[i].per_capita, 10)
}

Однако, когда я делаю typeof(data[0].total), он говорит, что это строка. У меня возникли проблемы позже в программе, и я думаю, что это потому, что значения не могут быть вычислены должным образом, потому что они не правильный тип. У кого-нибудь есть идея, где проблема?

4 ответа

Решение

parseInt не изменяет объекты, но анализирует строку и возвращает целое число. Необходимо повторно назначить проанализированные значения обратно свойствам объекта.

for (i=0; i<data.length; i++){
    data[i].year = parseInt(data[i].year, 10)
    data[i].total = parseInt(data[i].total, 10)
    data[i].per_capita = parseInt(data[i].per_capita, 10)
}

Это должно помочь!

var a = {
  per_capita: "125.8",
  total: "1007.2",
  year: "2009",
}

Object.keys(a).map(function(el){
  a[el] = parseInt(a[el])
})

console.log(a)
console.log(typeof a.total)

Все, что вы сделали, было преобразование, но вы пропустили задание:

for (i=0; i<data.length; i++){
    data[i].year = parseInt(data[i].year, 10)
    data[i].total = parseInt(data[i].total, 10)
    data[i].per_capita = parseInt(data[i].per_capita, 10)
}

parseInt Функция возвращает значение типа int, она не меняет входную переменную.

Другое дело - если вам нужно общее число, чтобы быть с плавающей точкой, вы должны использовать parseFloat функция, а не parseInt,

Вы можете перебрать массив, и объект amd назначит целочисленное значение свойств, которые вы хотите.

data.forEach(function (a) {
    ['year', 'total', 'per_capita'].forEach(function (k) {
        a[k] = Math.floor(+a[k]);
    });
});
Другие вопросы по тегам