将Javascript对象从字符串更改为int的属性

问题描述:

我有一个包含三个属性(年份,总数,per_capita)的对象数组。 例子:将Javascript对象从字符串更改为int的属性

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运算(数据[0]。总)它说,它的字符串。 我在程序后期遇到问题,我认为这是因为值不能正确计算,因为它们不是正确的类型。 任何人都有一个想法,问题在哪里?

+0

really int not float?你失去了精确性。 –

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]); 
    }); 
});