2017-02-07 10 views
2

2つの配列があります。彼らは次のようになります。複数の数値を配列に追加する

array price = 14.60, 39.00 

array quantity = 10, 5 

(数量は、ユーザーが購入したい品目の数量である - 10個のアイテムをproductAproductBの5から)

今、私はループをしたいです価格を数量に乗じるための変数を使用します。

同様:

14,60 * 10 

39,00 * 5 

endPrice変数に二つの結果を追加します。

私はこのような量の配列を取得:

$('.quantity').change(function() { 
    quantitys = $('input[type=number]').map(function() { 
     return $(this).val(); 
    }).get(); 
}); 

と、このような異なる価格:

var prices = $('.priceCell').map(function() { 
    return parseFloat($(this).html().trim()); 
}).get(); 

そして、それは私が試したものです:

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); 

まあ、その避難所を私のためにうまく働いた。誰かが私を助けてくれる?ソリューションが純粋なJavaScriptかjQueryであるかどうかは関係ありません。

+0

'quantitys'と' prices'が期待どおりであるかどうかチェックしましたか? – elementzero23

+0

ええ私は彼らの質問にちょうど好きです – WellNo

+0

変数の割り当て( 'Uncaught SyntaxError:Unexpected identifier')で構文エラーが発生していると仮定することはできません。これらの割り当ては配列を宣言または初期化しないからです。これを行うには、 'price = [14.60、39.00];'のようにする必要があります。周囲の角括弧に注意してください。 –

答えて

2

第一の問題あなたは、このようにすべての量はすべての価格を掛けられるネストされたループを使用していた

。ループは1つだけ必要です。あなたはendPrice = ...を使用していた

第二の問題

。この行を通過するたびにendPriceが上書きされます。あなたは合計を分離しているために、現在の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のニーズに追加されます+=を使用する必要があります。 (@デビッドトーマスの答えを参照してください)

あなたは、私がお勧めしたい二番目の配列に同じインデックスで開催された数で1つのアレイ内のすべての価格を掛けるために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);

+0

ニース!これは動作します! 2つの異なる結果を別の方法で追加する方法はありますか?同様:anotherarray = [(14.60 * 10の結果)、(36.00 * 5の結果)]。これは私を大きく助けるだろう。私はまだJSの新人です:) – WellNo

+0

@ウェルノ:絶対に、それはまさに私の答えがしているものです。 –

+0

@WellNo私は自分の答えを更新しました – Weedoze

1

閉じるあなたの代わりに=

自分の価値観に依存
endPrice += quantitys[q] * prices[p]; 

+=を逃している、あなたもそう、それらを解析することもできます。コメント欄より多くの情報を持つ

endPrice += (parseInt(quantitys[q]) * prices[p]) // you're already parsing prices; 

編集:

コードの性質上、価格は数量と同じ行にあるため、同じになります。したがって、新しいコードは...

for (var q = 0; q < quantitys.length; q++) { 
    endPrice += parseInt(quantitys[q]) * prices[q]; 
} 
+0

私も+ =で試しましたが、これは私に奇妙な価値を返しました(808.5)。正しい結果はおよそ350になります:/ – WellNo

+0

これを可能にするために私の答えを更新しました –

2

これにはダブルループを使用できません。これにより、毎にの価格がとなり、となります。あなたがしたいのは次のとおりです:

var endPrice = 0; 
for (var i = 0; i < quantitys.length; i++) { 
    endPrice += quantitys[i] * prices[i]; 
} 
3

2つのループは1つのみ使用する必要があります。また、+=を使用してendPriceに追加します。

var endPrice = 0; 
for (var q = 0; q < quantitys.length; q++) { 
    endPrice += parseFloat(quantitys[q]) * parseFloat(prices[q]); 
} 

alert(endPrice); 
2

を使用することができます。

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" 
+0

コードをコピー&ペーストして試してみましたが、複数の問題があります。私のコンソールも空です。エラーメッセージはまったくありません。 var totals = prices.map((p、index)=> p * quantitys [index]); – WellNo

+0

私が言ったことは忘れて、今は完璧です!どうもありがとう! :) – WellNo

1

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);

+1

私にそれを打つ! –

関連する問題