【问题标题】:Changing properties of a Javascript object from string to int将 Javascript 对象的属性从 string 更改为 int
【发布时间】:2017-02-11 16:58:07
【问题描述】:

我有一个对象数组,每个对象具有三个属性(年、总计、人均)。 示例:

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) 时,它说它是一个字符串。 我稍后在程序中遇到问题,我认为这是因为这些值无法正确计算,因为它们不是正确的类型。 有人知道问题出在哪里吗?

【问题讨论】:

  • 真的 int 不浮动?你正在失去精度。

标签: javascript arrays object parseint


【解决方案1】:

这应该有帮助!

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

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

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

【讨论】:

  • 我尝试改用 .values 但它不起作用,为什么会这样? Object.values(obj).forEach(el =&gt; el = parseInt(el))
【解决方案2】:

您可以迭代数组和对象并根据需要分配属性的整数值。

data.forEach(function (a) {
    ['year', 'total', 'per_capita'].forEach(function (k) {
        a[k] = Math.floor(+a[k]);
    });
});

【讨论】:

    【解决方案3】:

    你所做的只是转换,但你错过了任务:

    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

    【讨论】:

      【解决方案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)
      }
      

      【讨论】:

        猜你喜欢
        • 2020-07-11
        • 2019-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-17
        • 2021-08-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多