Изменение свойств объекта 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]);
});
});