正如您在下面的代码示例中所看到的,希望获得所有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("$",""));
我做错了什么?
答案 0 :(得分:2)
我看到的主要问题是你永远不会初始化sum
。因此,+= parseInt((obj[i].option_msrp).slice(1));
会将sum
设置为NaN
(因为undefined + anyNumber
为NaN
)。然后,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);