WellNo
WellNo

Reputation: 659

Add multiple numbers to Array

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

Answers (6)

Weedoze
Weedoze

Reputation: 13943

1st problem

You were using nested loops thus every quantity would be multiplied by every prices. You only need one loop.

2nd problem

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

nanobar
nanobar

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

David Thomas
David Thomas

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

Chris Dixon
Chris Dixon

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

baao
baao

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

jetpackpony
jetpackpony

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

Related Questions