我有这个代码:
var totalAmt=0;
for (i in orders)
{
order=orders[i];
if (order.status !='Cancelled')
totalAmt=totalAmt + order.amount;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我有3个订单,金额为3,1和5,那么totalAmt我得到的不是9 0315.所以我认为它将数量一起添加为字符串而不是整数.
我该如何解决?
CMS*_*CMS 11
order.amount 是一个字符串,如果+运算符的一个操作数是一个字符串,则会进行串联而不是求和.
您应该将其转换为数字,例如使用一元加运算符:
var totalAmt = 0, i, order; // declaring the loop variables
for (var i in orders) {
order = orders[i];
if (order.status !='Cancelled')
totalAmt += +order.amount; // unary plus to convert to number
}
Run Code Online (Sandbox Code Playgroud)
您也可以使用:
totalAmt = totalAmt + (+order.amount);
totalAmt = totalAmt + Number(order.amount);
totalAmt = totalAmt + parseFloat(order.amount);
// etc...
Run Code Online (Sandbox Code Playgroud)
你也使用for..in循环迭代orders,如果orders是数组,你应该使用普通的for循环:
for (var i = 0; i<orders.length; i++) {
//...
}
Run Code Online (Sandbox Code Playgroud)
这是因为for ... in语句用于迭代对象属性,对于数组来说它可能很容易使用它,因为它似乎有效,但不推荐它,因为它将迭代对象属性,并且如果您已扩展Array.prototype,那么除了数字索引之外,还将迭代这些属性.
避免它的另一个原因是因为此语句使用的迭代顺序是任意的,并且迭代数组可能不会按数字顺序访问元素,并且它似乎比简单的for循环慢得多.
如果迭代顺序不重要,我个人喜欢向后迭代:
var i = orders.length;
while (i--) {
//...
}
Run Code Online (Sandbox Code Playgroud)