JavaScript - 数组的逻辑问题

标签 javascript arrays

我正在尝试根据订单和销售点数组生成发票,为此,我必须遍历销售点数组并获取佣金以及一些其他信息并基于它我循环遍历 orders 数组以进行必要的计算;然而,我似乎有一个逻辑问题,因为我试图获取 outlets 数组所需的值,该数组的长度为 2,而 orders 数组的长度为 3,所以orders 数组始终未完全执行,而是在第二个索引处停止。

问题:我应该怎么做才能列出/计算每个商店(id)的最终发票?

要调试的实时代码:https://playcode.io/597316/

这是代码:

  var finalAmount = 0;
  var itemsProcessed = 0;

  async function dodo() {
  try {
     const orders = {
    Items: [  {
      outletId: 2,
      percentage: 20,
      amountUsed: 0,
      amountEntered: 100,
    },
    {
      outletId: 2,
      percentage: 20,
      amountUsed: 0,
      amountEntered: 100,

    },
    {
      outletId: 1,
      percentage: 10,
      amountUsed: 0,
      amountEntered: 300,
    }],
    Count: 1
    };


    let outlets = {
  Items: [
    {
      id: 1,
      name: 'Test Shop',
      percentage: 10,
      commission: 5,
    },
    {
      id: 2,
      name: 'Test 2 Shop',
      percentage: 20,
      commission: 5,
    }
  ],
  Count: 2,
  ScannedCount: 2
};

    for (var i = 0; i < outlets.Items.length; i++) {
      if (orders.Count > 0) {

        orders.Items.forEach(order => {
          finalAmount += parseFloat((order.amountEntered - (order.amountEntered * (outlets.Items[i].commission + outlets.Items[i].percentage) / 100)).toFixed(2));
        },itemsProcessed++);
      }

      //itemsProcessed seems to stop at 2 because outlets.Items.length = 2

       //Never goes inside because orders.Items.length > itemsProcessed
      if (finalAmount > 0 && itemsProcessed === orders.Items.length) {
        //Create Invoice
        console.log('Generate invoice with an amount of ', finalAmount);
        finalAmount = 0;

      }
    }
  } catch (err) {
    console.log('Error ', err);
  }
  }

  dodo();

最佳答案

这里缺少的难题是将 Orders 数组中的 outletId 与 Outlets 数组中的 id 进行匹配。解决方案应如下所示:

    for (var i = 0; i < outlets.Items.length; i++) {
  if (orders.Count > 0) {
    orders.Items.forEach(order => {
      if(order.id === outlets.Items[i].id) {
          finalAmount += parseFloat((order.amountEntered - (order.amountEntered * (outlets.Items[i].commission + outlets.Items[i].percentage) / 100)).toFixed(2));
      }
    });
  }

   //Never goes inside because orders.Items.length > itemsProcessed
  if (finalAmount > 0) {
    //Create Invoice
    console.log('Generate invoice with an amount of ', finalAmount);
    finalAmount = 0;

  }
}

关于JavaScript - 数组的逻辑问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61642358/

相关文章:

javascript - 如何从 ES6 类的静态方法返回非静态变量

javascript - AngularJS + 单核 CPU = 几乎 100% CPU

javascript - JavaScript 方法/属性的浏览器兼容性/支持表

javascript - 如何将 Map.get() 与数组数组一起使用

c - 将二维数组传递给函数

java - 我的程序遇到了一些难题(注意不能使用 ArrayList)

c - 环形缓冲区满时清空

javascript - will_paginate 页面链接问题

javascript - 使用 Q,js 进行 ajax 调用

c++ - 我是填错了这个数组还是输出错了?