我想遍历对象数组并将字符串值更改为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);
将字符串更改为数字