У меня есть следующий код
function getNumberWithCommas(number) {
return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
}
var price = [
6599, 7659, 899, 569, 899, 279, 219, 1797, 3999, 2769, 599, 1349, 2149, 219,
219, 519, 2499, 2949, 5149, 7689, 15999,
];
for (let i = 0; i < 20; i++) {
var productPrice = document.createElement("span");
productPrice.className = "price";
productPrice.setAttribute("id", `price-id-${i}`);
var calculatedPrice = price[i] * quantities[i];
productPrice.textContent = `R$ ${getNumberWithCommas(calculatedPrice)},00`;
precoTotalDiv.appendChild(productPrice);
var totalPrice = [];
totalPrice.push(calculatedPrice);
console.info(totalPrice);
}
Он динамически создает цены на товары в зависимости от их количества в корзине и их цены. Я хотел бы сохранить эти значения (calculatedPrice) внутри массива, чтобы получить общую цену (сумму всех цен) внизу корзины.
Он добавляет calculatePrice к totalPrice[], но добавляет только одно значение, длина массива остается единицей. Как только я нажимаю на другой продукт, calculatePrice перезаписывается ценой другого продукта. Я хотел бы получить сумму всех сгенерированных цен, а не сумму только одного продукта.
Зачем вам нужен массив для вычисления суммы? Просто вставьте total += calculatedPrice
в петлю.
Кстати, вы никогда не добавляете диапазон в DOM.
Я пытался, но сохраненное значение сбрасывается на цену другого товара.
Покажи, что ты пробовал. Мы не можем догадаться, что вы делаете не так.
Только что обновил пост тем, что пробовал. Надеюсь, это достаточно ясно.
Вы создаете новый массив на каждой итерации...
Я заметил, что это частая ошибка новичков.
Это потому, что вы создаете новый массив в каждом цикле
Сначала объявите свой массив вне цикла:
var totalPrice = [];
for (let i = 0; i < 20; i++) {
var productPrice = document.createElement("span");
productPrice.className = "price";
productPrice.setAttribute("id", `price-id-${i}`);
var calculatedPrice = price[i] * quantities[i];
productPrice.textContent = `R$ ${getNumberWithCommas(calculatedPrice)},00`;
precoTotalDiv.appendChild(productPrice);
totalPrice.push(calculatedPrice);
console.info(totalPrice);
}
Вы можете сохранить значения, сгенерированные циклом for, внутри массива в JavaScript, используя метод push массива. Вот пример:
// Initialize an empty array
var result = [];
// Use a for loop to generate values
for (var i = 0; i < 5; i++) {
// Push the generated value to the array
result.push(i);
}
// Print the final array
console.info(result);
Это выведет:
[0, 1, 2, 3, 4]
просто переместите let totalPrice = []
за пределы цикла:
Потому что, когда вы помещаете totalPrice внутрь цикла, оно будет сбрасываться в каждом цикле.
var totalPrice = [];
for (let i = 0; i < 20; i++) {
var productPrice = document.createElement("span");
productPrice.className = "price";
productPrice.setAttribute("id", `price-id-${i}`);
var calculatedPrice = price[i] * quantities[i];
productPrice.textContent = `R$ ${getNumberWithCommas(calculatedPrice)},00`;
precoTotalDiv.appendChild(productPrice);
totalPrice.push(calculatedPrice);
}
console.info(totalPrice);
Так что поставьте
array.push(calculatedPrice)
в петлю.