我正在使用vuejs构建一个购物车系统,想知道为什么total变量返回NaN而不是计算所有产品的总价。这是总计函数
total: function(){ var tot = 0; for ( var product in this.products){ tot += product.price; } return tot; }
这就是我在模板中显示它的方式
total: {{total}}
wribegjk1#
for in循环用于循环对象属性,而不是数组,阅读更多关于它的信息here你可以用它来循环数组,但是你得到的是乘积的索引,而不是乘积本身。所以当你做tot += product.price;的时候,你是把0(tot的第一个值)和undefined相加,得到NaN对您的情况使用.forEach方法,如下所示
for in
tot += product.price;
tot
undefined
NaN
total: function(){ let tot = 0; this.products.forEach(product => tot += product.price) return tot; }
使用reduce而不是forEach()
forEach()
total: function(){ return this.products.reduce((tot, product) => tot += product.price, 0) }
jjhzyzn02#
你自己调试一下怎么样
for ( var product in this.products){ console.log(product); tot += product.price; }
你会发现product是this.products的可枚举属性,如果this.products是一个数组,它会输出0,1,2,....,你可以在这里更好地理解for..in。所以,如果坚持使用for..in,最好改为
product
this.products
0
1
2
for..in
tot += this.products[product].price;
或者使用reduce对值求和是更好的选择。
reduce
tot: function (){ var tot = 0; tot = this.products.reduce((pre, next) => { return pre += next.price; }, tot); return tot; }
zaqlnxep3#
如果以上答案不起作用,请尝试将return语句更改为:
return tot || 0
3条答案
按热度按时间wribegjk1#
for in
循环用于循环对象属性,而不是数组,阅读更多关于它的信息here你可以用它来循环数组,但是你得到的是乘积的索引,而不是乘积本身。所以当你做
tot += product.price;
的时候,你是把0(tot
的第一个值)和undefined
相加,得到NaN
对您的情况使用.forEach方法,如下所示
使用reduce而不是
forEach()
jjhzyzn02#
你自己调试一下怎么样
你会发现
product
是this.products
的可枚举属性,如果this.products
是一个数组,它会输出0
,1
,2
,....,你可以在这里更好地理解for..in。所以,如果坚持使用
for..in
,最好改为或者使用
reduce
对值求和是更好的选择。zaqlnxep3#
如果以上答案不起作用,请尝试将return语句更改为: