尝试从货币字符串中删除美元符号以将字符串转换为整数

时间:2017-04-11 13:20:53

标签: javascript string parseint

正如您在下面的代码示例中所看到的,希望获得所有option_msrp值的总和。

var obj, i, sum;
obj = JSON.parse(socookie);
for(i=0; i<obj.length; i++){
    sum += parseInt((obj[i].option_msrp).slice(1));
}

option_msrp是以下格式的字符串:“$ 300”(美元符号后跟美元值,这是一个整数)。我正在尝试通过parseInt将此字符串转换为整数。

我正在尝试从字符串中删除美元符号,以便能够将此字符串转换为整数。

我已经尝试了各种方法来执行此操作,但没有一个方法有效:

//doesn't work 
sum += parseInt((obj[i].option_msrp).slice(1));

//also doesn't work
sum += parseInt((obj[i].option_msrp).replace("$",""));

我做错了什么?

1 个答案:

答案 0 :(得分:2)

我看到的主要问题是你永远不会初始化sum。因此,+= parseInt((obj[i].option_msrp).slice(1));会将sum设置为NaN(因为undefined + anyNumberNaN)。然后,sum将继续NaN进行后续迭代,因为NaN + anyNumber也是NaN

只需在循环前设置sum = 0

问题示例:

var socookie = '[{"option_msrp": "$300"},{"option_msrp": "$100"}]';
var obj, i, sum;
obj = JSON.parse(socookie);
for(i=0; i<obj.length; i++){
    sum += parseInt((obj[i].option_msrp).slice(1));
}
console.log(sum);

解决方案示例:

var socookie = '[{"option_msrp": "$300"},{"option_msrp": "$100"}]';
var obj, i, sum = 0;  // <======
obj = JSON.parse(socookie);
for(i=0; i<obj.length; i++){
    sum += parseInt((obj[i].option_msrp).slice(1));
}
console.log(sum);

旁注:您可以使用Array#reduce摆脱该循环。求和是其旗帜用例之一:

var sum = obj.reduce(function(s, e) {
  return s + parseInt(e.option_msrp.slice(1));
}, 0);

var socookie = '[{"option_msrp": "$300"},{"option_msrp": "$100"}]';
var obj = JSON.parse(socookie);
var sum = obj.reduce(function(s, e) {
  return s + parseInt(e.option_msrp.slice(1));
}, 0);
console.log(sum);

或者使用ES2015 +(又名“ES6”+)语法:

const sum = obj.reduce((s, e) => s + parseInt(e.option_msrp.slice(1)), 0);

const socookie = '[{"option_msrp": "$300"},{"option_msrp": "$100"}]';
const obj = JSON.parse(socookie);
const sum = obj.reduce((s, e) => s + parseInt(e.option_msrp.slice(1)), 0);
console.log(sum);