Reputation: 659
I have two arrays. They look like this:
array price = 14.60, 39.00
and
array quantity = 10, 5
(quantity is the quantity of items the user want to buy - 10 items from productA
and 5 of productB
)
Now I want loop through the variables to multiply the price with the quantity.
Like :
14,60 * 10
and
39,00 * 5
and add the two results to the endPrice
variable.
I get the quantity array like this:
$('.quantity').change(function () {
quantitys = $('input[type=number]').map(function () {
return $(this).val();
}).get();
});
and the different prices like this:
var prices = $('.priceCell').map(function () {
return parseFloat($(this).html().trim());
}).get();
And that's what I tried:
var endPrice = 0;
for (var q = 0; q < quantitys.length; q++) {
for (var p = 0; p < prices.length; p++) {
endPrice = quantitys[q] * prices[p];
}
}
alert(endPrice);
Well, that haven't worked for me so well. Can someone help me there? Doesn't matter if the solution is pure JavaScript or jQuery.
Upvotes: 2
Views: 1857
Reputation: 13943
You were using nested loops thus every quantity would be multiplied by every prices. You only need one loop.
You were using endPrice = ...
. This will override the endPrice
every time you go through this line. You need to use +=
that will add to the current enbPrice
var prices = [14.60, 39.00];
var quantities = [10,5];
var endPrice = 0;
for(let i=0, l=prices.length;i<l;i++){
endPrice += prices[i] * quantities[i];
}
console.log(endPrice);
EDIT
OP need to have separated totals. (See @David Thomas's answer)
You can use Array.prototype.map()
var prices = [14.60, 39.00];
var quantities = [10, 5];
var totals = prices.map((p, index) => p * quantities[index]);
console.log(totals);
Upvotes: 2
Reputation: 66355
const prices = [14.60, 39.00];
const qty = [10, 5];
const endPrice = prices.reduce((total, price, i) => total + price * qty[i], 0);
console.log(endPrice);
Upvotes: 1
Reputation: 253308
To multiply every price in one Array by the number held at the same index in a second Array I'd recommend:
var price = [14.60, 39.00],
quantity = [10, 5],
// here we iterate over the price Array, using
// Array.prototype.map() in order to return a
// new Array:
totals = price.map(
// p: the current array-element of
// the Array of prices,
// index: the index of the current
// array-element of the Array.
// using an Arrow function to
// multiply the price ('p') by
// the value held in the quantity
// Array at the same index:
(p,index) => p * quantity[index]
);
// logging the created 'totals' Array to the console:
console.log(totals); // [146,195]
// logging the created Array, after joining its
// elements together to form a String with values
// separated with a ',' character:
console.log(totals.join(',')); // "146,195"
Upvotes: 2
Reputation: 9167
Close, you're missing +=
instead of =
endPrice += quantitys[q] * prices[p];
Dependent on your values, you may also want to parse them, so:
endPrice += (parseInt(quantitys[q]) * prices[p]) // you're already parsing prices;
Edit with more information in comments:
Because of the way your code is, they prices are on the same row as the quantities, so they'll be the same. So, the new code will be...
for (var q = 0; q < quantitys.length; q++) {
endPrice += parseInt(quantitys[q]) * prices[q];
}
Upvotes: 1
Reputation: 73231
You are using two loops while you should only use one. Also, add to endPrice
by using +=
:
var endPrice = 0;
for (var q = 0; q < quantitys.length; q++) {
endPrice += parseFloat(quantitys[q]) * parseFloat(prices[q]);
}
alert(endPrice);
Upvotes: 3
Reputation: 1280
You can't use the double loop for this. This multiplies every price with every quantity. What you want to do is this:
var endPrice = 0;
for (var i = 0; i < quantitys.length; i++) {
endPrice += quantitys[i] * prices[i];
}
Upvotes: 2