2012-02-28 58 views
1

JavaScriptオブジェクトに格納されている数値のリストを合計します。オブジェクトは、このコードを使用して作成され、更新された:JavaScriptの配列に格納されている数値の合計

var myscore = $('input[name="Points1"]').val(); 
scorelist = JSON.parse(localStorage.getItem(playerName + 'scorelist') || '[]'); 
     scorelist.push(myscore); 
     localStorage.setItem(playerName + 'scorelist', JSON.stringify(scorelist)); 
     $('div.scorecolumn', column).html("Score: <br>" + scorelist.join('<br>') + "<br>"); 

基本的に私は一度の列にあるものは何でも取る、それを解析し、myscoreを追加し、それを文字列化、<br>で各要素に参加しにリストを作成しますscorecolumn。数値のリストはオブジェクトとして保存されます。私の目標は、任意の時点でオブジェクト内のすべての数値を合計することです。

このスクリプトは、いくつかの変数がここで定義されていないように見える理由の1つのパラメータを渡す関数の内部にあります。

ご協力いただければ幸いです!おかげ

UPDATE:

var nicTotalScore = nicScoreList.reduce(function(score, total) { 
     return total + score; 
    }, 0); 
    console.log(nicTotalScore); //12120 
    console.log(nicScoreList); //["12", "12"] 

UPDATE: 提出したときに、スコアフィールドは、空の文字列 "" の代わりにスコアを空白のままになっている場合。これは、reduceメソッドが配列を通過するときに0として登録されます。これは合計に影響しませんが、たとえば、私は平均スコアを見つけたかったとします。それはそれを捨てます。そこに任意のアイデア?ありがとう

答えて

3

push()scorelistの場合は、おそらくArrayと言いたくなります。

reduce()を使用できます。

var total = scorelist.reduce(function(total, score) { 
    return total + +score; 
}, 0); 
+0

非常にエレガントなリダクション機能。 – Triztian

+0

私はreduce関数を本当に理解しているのか分かりません。もっと説明してもらえますか? –

+0

@NicMeiring MDNには良い[documentation](https://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/Array/Reduce)があります。ありがとう。 – alex

関連する問題