我正在尝试根据订单和销售点数组生成发票,为此,我必须遍历销售点数组并获取佣金
以及一些其他信息并基于它我循环遍历 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/