Javascript 当我在代码中为循环中断添加.push函数时

Javascript 当我在代码中为循环中断添加.push函数时,javascript,for-loop,vue.js,Javascript,For Loop,Vue.js,我有一个数组,其中包含所有订单的详细信息订单时间、订单详细信息、价格等,我想找到每个月的总价格,并将它们全部放入一个数组中 data(){ checks:[//there is data from database] months:["2019-01","2019-02","2019-03","2019-04","2019-05","2019-06","2019-07","2019-08","2019-09","2019-10","2019-11","2019-12"],

我有一个数组,其中包含所有订单的详细信息订单时间、订单详细信息、价格等,我想找到每个月的总价格,并将它们全部放入一个数组中

  data(){
    checks:[//there is data from database]
    months:["2019-01","2019-02","2019-03","2019-04","2019-05","2019-06","2019-07","2019-08","2019-09","2019-10","2019-11","2019-12"],
    monthlyTotal:0,
    monthlyTotalsArr:[]
  },
  computed:{
   calcTotalMonthly(){
     for(let i=0; i<this.months.length; i++){
            this.checks.forEach((item => {
               if(item.orderTime.includes(this.months[i])){
                 item.bill.forEach(prod => {
                   this.monthlyTotal += parseInt(prod.price);
                 });
               }    
             }));
              this.monthlyTotalsArr.push(this.monthlyTotal);
             this.monthlyTotal = 0; 
         } return this.monthlyTotalsArr;

   }
  }
当我运行此命令时出现错误[Vue warn]:在组件渲染函数中可能有一个无限更新循环,monthlyTotalsArr.length将类似于1220


如果我删除this.monthlyTotal sarr.pushthis.monthlyTotal;和console.logthis.monthlyTotal;我刚刚看到了12个应该是的结果,但我不知道为什么push函数会打破循环。这是我的问题,最后我想在monthlyTotalsArr中看到12个不同的元素。

计算属性不应该有副作用。在本例中,您同时修改monthlyTotal和MonthlyTolSarr。不需要这样做,只需在函数中使用局部变量,然后返回计算值

发生的情况是MonthlyToLarr被注册为这个计算属性的依赖项。但随后您会立即更改它,这会将计算属性标记为需要重新计算。它在一个循环中不断循环,试图重新计算它,但每次它的依赖项发生变化时,它都需要再次循环

你应该可以这样写:

calcTotalMonthly{ 返回this.months.mapmonth=>{ 让monthlyTotal=0 用于此的常量检查。检查{ 如果选择check.orderTime.includeMonth{ 用于支票的const prod.bill{ monthlyTotal+=parseIntprod.price } } } 每月总收益 } } 我已将forEach调用替换为for/of循环。这不是必需的,但我认为这使它更容易遵循。我将主循环替换为使用map,因为这似乎是它真正的功能

如果希望在其他地方引用该数组,可以将calcTotalMonthly重命名为monthlyTotalsArr。在我的版本中,数据属性monthlyTotal和MonthlyTolSarr都已删除


我没有试图解决3个嵌套循环可能带来的性能问题。

this.monthlyTotal+=parseIntprod.price;此代码中的this与this.monthlyTotalsArr.pushthis.monthlyTotal中的不同;我看不出有什么不同?虽然我在下面提供的答案是一个很好的改变,但我不再相信它完全解释了为什么你会得到一个无限的更新循环。我认为模板中的某个地方也需要有问题才能导致该消息。如果可能的话,你能为你的模板包括代码,特别是任何参考monthlyTotalsArr或calcTotalMonthly的章节吗?如果模板太大,我建议在发布之前将其剥离到一些更小的内容,小心检查警告是否仍然存在。