JavaScript对象编号格式



我想遍历对象数组并将字符串值更改为number。下面是一个例子:

我正在使用类似于下面变量的数据格式。我将这个数组传递给剑道图表,它无法读取displayAd_imp, videoAd_imp, tv_imp的值,因为它们是字符串,有些包含","也是。

var objArr = [{
    "Title": "July 13 - July 19 2014",
        "displayAd_imp": "3,500",
        "videoAd_imp": "1.5",
        "tv_imp": "0.52",
        "Date": "2014-07-17T00:00:00.000Z",
        "WeekNo": 29
}, {
    "Title": "July 20 - July 26 2014",
        "displayAd_imp": "1,600",
        "videoAd_imp": "2.55",
        "tv_imp": "0.052",
        "Date": "2014-07-24T00:00:00.000Z",
        "WeekNo": 30
}, {
    "Title": "July 27 - Aug 2 2014",
        "displayAd_imp": "1,500",
        "videoAd_imp": "2.1",
        "tv_imp": "0.122",
        "Date": "2014-07-31T00:00:00.000Z",
        "WeekNo": 31
}, {
    "Title": "Aug 3 - Aug 9 2014",
        "displayAd_imp": "1,500",
        "videoAd_imp": "1.99",
        "tv_imp": "0.254",
        "Date": "2014-08-07T00:00:00.000Z",
        "WeekNo": 32
}, {
    "Title": "Aug 10 - Aug 17 2014",
        "displayAd_imp": "1,400",
        "videoAd_imp": "2.0",
        "tv_imp": ".235",
        "Date": "2014-08-14T00:00:00.000Z",
        "WeekNo": 33
}];

下面是我试图写遍历每个键的函数,但我在改变格式时遇到了一些麻烦。下面是一个jsfiddle的例子。

//looping over the array
for(var i in objArr){
    var g = objArr[i]
    for(var n in g){
         if(g.hasOwnProperty(n)){
            //I'm trying to remove the "," from the string below. 
            //g[n] = g[n].replace(/,/g,"");
            console.log("**********************************")
            console.log(n, " - ",typeof(n), " - ", g[n]);
        }
    }
}

希望问题和例子是清楚的,提前感谢!

replace函数可能比您想象的要简单得多——它不需要正则表达式。下面的命令可以将逗号替换为空:

g[n] = g[n].replace(",", "");

至于将字符串转换为int型,您可以使用parseInt

g[n] = parseInt(g[n]);
结合

:

g[n] = parseInt(g[n].replace(",", ""));

只对正确的值应用正则表达式,并使用parseFloat来解析数字:

var toReplace = ["displayAd_imp", "videoAd_imp", "tv_imp"];

和后面的代码

if(toReplace.indexOf(n) > -1) {
  g[n] = parseFloat(g[n].replace(/,/g, ""));
}

小提琴:http://jsfiddle.net/a8w8suo0/

在Firefox的记事本上瞎折腾了几分钟,我得出了这个结论:

for (i in objArr) {
  var g = objArr[i];
  for (n in g) {
    if (!/-/.test(g[n])) {
      try {
        try {
          g[n] = parseInt(g[n].replace(",",''),10);
        } catch (e) {
          g[n] = parseFloat(g[n].replace(",",''),10);
        }
      } catch(e) {}
    }
  }
  for (n in g) console.log(n + 't:t' + g[n]);
}

如果现有值中有-,则跳过。否则,它将尝试解析整数,如果解析失败,则解析值中的浮点数(删除可能存在的任何逗号)。如果它不能解析整数或浮点数。

您可以通过parseInt(yourVariabe)Number(yourVariable);将字符串更改为数字

最新更新