返回NaN的购物车的Vuej合计变量

envsm3lx  于 2022-11-17  发布在  Vue.js
关注(0)|答案(3)|浏览(212)

我正在使用vuejs构建一个购物车系统,想知道为什么total变量返回NaN而不是计算所有产品的总价。
这是总计函数

total: function(){
    var tot = 0;
    for ( var product in this.products){
        tot += product.price;
    }
    return tot;
}

这就是我在模板中显示它的方式

total: {{total}}
wribegjk

wribegjk1#

for in循环用于循环对象属性,而不是数组,阅读更多关于它的信息here
你可以用它来循环数组,但是你得到的是乘积的索引,而不是乘积本身。所以当你做tot += product.price;的时候,你是把0(tot的第一个值)和undefined相加,得到NaN
对您的情况使用.forEach方法,如下所示

total: function(){
  let tot = 0;
  this.products.forEach(product => tot += product.price)
  return tot;
}

使用reduce而不是forEach()

total: function(){
  return this.products.reduce((tot, product) => tot += product.price, 0)
}
jjhzyzn0

jjhzyzn02#

你自己调试一下怎么样

for ( var product in this.products){
    console.log(product);
    tot += product.price;
}

你会发现productthis.products的可枚举属性,如果this.products是一个数组,它会输出012,....,你可以在这里更好地理解for..in
所以,如果坚持使用for..in,最好改为

tot += this.products[product].price;

或者使用reduce对值求和是更好的选择。

tot: function (){
    var tot = 0;
    tot = this.products.reduce((pre, next) => {
        return pre += next.price;
    }, tot);
    return tot;
}
zaqlnxep

zaqlnxep3#

如果以上答案不起作用,请尝试将return语句更改为:

return tot || 0

相关问题