首页 > 解决方案 > 节点电子商务购物车 NaN 问题

问题描述

正在计算我的购物车的总数,我似乎遇到了一个数字问题。我不太确定这个功能哪里出错了。请忽略我刚刚编码时是否没有正确计算总数,但是使用 JSON 我传递的是数字而不是字符串。

JSON

{
    "id": "611afa8b9069c9126cff3357",
    "discount": {
        "title": "None",
        "type": "None",
        "percent": 0
    },
    "items": [
        {
            "sku": 1000,
            "qty": 2,
            "price": 10.99
        },
        {
            "sku": 1001,
            "qty": 2,
            "price": 16.99
        },
        {
            "sku": 1003,
            "qty": 1,
            "price": 15.99
        }
    ]
}
const calculateTotal = (items, discount) => {
  let total = 0;
  let discountAmt = 0;

  console.log(discount);
  console.log(items);
  console.log(items.length);

  for (let i = 0; (j = items.length), i < j; i++) {
    discountAmt = 0;

    if (discount.type == "Item" && discount.itemNum == j.sku) {
      discountAmt = j.price * (discount.percent / 100);
      total = total - discountAmt;
    } else {
      total = total + j.price * j.qty;
    }
  }

  if (discount.type == "Order") {
    discountAmt = 0;
    discountAmt = total * (discount.percent / 100);
    total = total - discountAmt;
  }

  console.log(total);

  return total;
};

控制台返回

{ title: 'None', type: 'None', percent: 0 }
[
  { sku: 1000, qty: 2, price: 10.99 },
  { sku: 1001, qty: 2, price: 16.99 },
  { sku: 1003, qty: 1, price: 15.99 }
]
3
NaN
NaN

标签: node.jsreactjs

解决方案


如果你想遍历你的项目,那么你的循环是不正确的。

你可以这样做:

for (let i = 0; i < items.length; i++) { // i as index
    let j = items[i]; // j will have the object based on the index
    discountAmt = 0;

    if (discount.type == "Item" && discount.itemNum == j.sku) {
      discountAmt = j.price * (discount.percent / 100);
      total = total - discountAmt;
    } else {
      total = total + j.price * j.qty;
    }
}

或更简单:

for (let j of items) { 
    discountAmt = 0;

    if (discount.type == "Item" && discount.itemNum == j.sku) {
      discountAmt = j.price * (discount.percent / 100);
      total = total - discountAmt;
    } else {
      total = total + j.price * j.qty;
    }
}

推荐阅读