首页 > 解决方案 > 如何计算 node.js 中的值

问题描述

我正在开发像 Food Panda 这样的应用程序。我面临一个问题。我正在计算司机的支出(例如,如果司机每笔订单赚取 4.3 美元)我试图获得每个月的总和,但是当司机停止服务时,我的代码为这些月份分配了相同的值。

请告诉我我的代码做错了什么:

parameters: toDate=2020-10-21&fromDate=2021-11-21

const resturantOrders = await DelivigoOrder.findAll({
  attributes: [
    "Id",
    "OrderNumber",
    "OrderStatusId",
    "TotalPrice",
    "OrderAcceptTime",
    "DriverId",
    "ResturentId"
  ],
  where: {
    DriverId: driverId,
    IsActive: true,
    // OrderAcceptTime: { [Op.between]: [fromDate, toDate] },
    $or: [
      { OrderStatusId: 50 },
      { OrderStatusId: 55 },
      { OrderStatusId: 60 },
      { OrderStatusId: 70 },
      { OrderStatusId: 80 },
    ],
  },
});

var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct ", "Nov ", "Dec"];

var orderPayouts = [];
let payout = 0;
for (let index = 0; index < months.length; index++) {
  const element = months[index];

  for (let index = 0; index < resturantOrders.length; index++) {
    const order = resturantOrders[index];

    if (element === InternalServices.getMonthName(order.OrderAcceptTime)) {
      console.log(element, index, "in");
      payout = payout + 4.3;
    }
  }

  orderPayouts.push({
    month: element,
    payout: payout
  });
};

输出

{
  "result": [{
    "month": "Jan",
    "payout": 55.899999999999984
  }, {
    "month": "Feb",
    "payout": 55.899999999999984
  }, {
    "month": "Mar",
    "payout": 55.899999999999984
  }, {
    "month": "Apr",
    "payout": 55.899999999999984
  }, {
    "month": "May",
    "payout": 55.899999999999984
  }, {
    "month": "Jun",
    "payout": 55.899999999999984
  }, {
    "month": "Jul",
    "payout": 55.899999999999984
  }, {
    "month": "Aug",
    "payout": 55.899999999999984
  }, {
    "month": "Sep",
    "payout": 55.899999999999984
  }, {
    "month": "Oct",
    "payout": 150.5
  }, {
    "month": "Nov",
    "payout": 150.5
  }, {
    "month": "Dec",
    "payout": 150.5
  }]
}

驱动程序仅在 1 月和 10 月两个月内工作,但我的代码将 Jan 值分配给所有其他月份与 OCT 相同。

标签: javascriptnode.jsloops

解决方案


ley payout在循环之外声明。您应该考虑在循环内声明它

...
for (let index = 0; index < months.length; index++) {
  let payout = 0;
  const element = months[index];
...

推荐阅读