Problem
const items = [
  { id: 1, name: 'Apple', price: 0.5 },
  { id: 2, name: 'Banana', price: 0.3 },
  { id: 3, name: 'Orange', price: 0.6 }
];

function applyDiscount(items, discount) {
  for (let i = 0; i < items.length; i++) {
    items[i].price -= items[i].price * discount;
    items[i].price = items[i].price.toFixed(2);
  }
  return items;
}

const discountedItems = applyDiscount(items, 0.1);
const totalPrice = discountedItems.reduce((sum, item) => sum + item.price, 0);
Solution

The bug is in the applyDiscount function.

After applying the discount, we use toFixed(2) to round the price to two decimal places. However, toFixed() returns a string, not a number. This means that when we later try to calculate the total price using reduce(), we’re actually performing string concatenation instead of number addition.

There are a bunch of ways to fix this. The simplest (if you’re confident in your data), is to use Number.

function applyDiscount(items, discount) {
  return items.map(item => ({
    ...item,
    price: Number((item.price * (1 - discount)).toFixed(2))
  }));
}