使用vue js将值相乘

Multiplying values using vue js

我有这个对象数组。

[
 {
 "id":181,
 "user_id":"3",
 "order_details":    
    [
      {"id":164,
       "order_id":"181",
       "quantity":"1",
       "price":"5.00"
      }, 
      {"id":163,
       "order_id":"181",
       "quantity":"6",
       "price":"10.00"
      }

  ]
 }
]

这些是购物车中的订单商品。 我想使用 price * quantity 计算每个 order_detail 的总数。

我在组件的计算 属性 中有这个函数。

total: function(){
  for (var i=0; i< this.invoice.length; i++){
     for(var j=0; j<this.invoice[i].order_details.length; j++){
        return this.invoice[i].order_details[j].price * this.invoice[i].order_details[j].quantity;
            }
      }
}

returnorder_detail 中所有项目的总计相同。 我缺少什么?这是在 vue 中执行此操作的正确方法吗?

更新

我需要这样显示数据:

          <tr v-for="item in order.order_details">
              <td>{{item.quantity}}</td>
              <td>{{item.product.price}}</td>
              <td>{{total}}</td>
          </tr>

所以我希望对于每个订单详细信息,函数应该 运行 和 return price * quantity

示例输出:

 ## Qty | Price | Total  
 ## 2     | 5         | 10    
 ## 3    | 5          | 15  

你不应该有一个总和变量,你可以在其中对所有项目级别的总数求和,如下所示:

total: function(){
  var sum = 0
  for (var i=0; i< this.invoice.length; i++){
     for(var j=0; j<this.invoice[i].order_details.length; j++){
        sum += this.invoice[i].order_details[j].price * this.invoice[i].order_details[j].quantity;
            }
      }
   return sum
}

或者您可以使用 javascript 的 reduce 函数以更简洁的方式获得它,如下所示:

total: function(){
  return this.invoice.reduce(function(prevVal, inv){
     return prevVal + inv.order_details.reduce(function(sum, od){
         return sum + od.price * od.quantity
     }, 0)
  }, 0)
}

已编辑

鉴于您的代码示例,您可以只在 total 方法中传递 item 和 return 总数,如下所示:

  <tr v-for="item in order.order_details">
      <td>{{item.quantity}}</td>
      <td>{{item.product.price}}</td>
      <td>{{total(item)}}</td>  // or just {{item.quantity * item.product.price}} if it is that simple
  </tr>

JS

total: function(item){
   return item.price * item.quantity
}