2017-05-17 5 views
0

ボタンがクリックされると、私は、アレイ内の結果は、例えば表示されたい用いた:私は、しかし、コードにループを使用する..ループ二つの関連配列を

のジョン・スミス16、ジャック・スノー10など私のループは、私が得るすべてのボタンをクリックすると、現時点では間違っています:[オブジェクトオブジェクト]。

誰かが可能な修正を提供できますか?

function begin() { 
     listresults(); 
    (); 
    } 
    var results1 = {name:"John Smith", score:16}; 
    var results2 = {name:"Jack Sow", score:10}; 
    var results3 = {name:"Tessa Flip", score:15}; 
    var results = [results1, results2, results3]; 

    function listresults() { 
     var text = ""; 
     var total = 0; 
     var i; 
    for (i in results) { 
     text += results[i] + "<br>"; 
    } 
    document.getElementById('message').innerHTML = text; 


    } 
+2

ザッツあなたの代わりにその値のオブジェクトを追加しているので 試み: 'テキスト+ =結果[I ]] +結果[i] .score + "
"; – warl0ck

+0

対象オブジェクトこのテキストを試してください+ = results [i] .name + '' results [i] .score + "
"; – JYoThI

+0

私の一行の答えをチェックしてください。私はそれがあなたの期待通りに動作することを願って –

答えて

0

フィールドにオブジェクト値の代わりにオブジェクトを追加しているためです。

これは名前にアクセスして使用すると、オブジェクトのあなたの配列をループしているときに返されたオブジェクトからスコアの適切な方法である:ここでは

function begin() { 
     listresults(); 
    (); 
    } 
    var results1 = {name:"John Smith", score:16}; 
    var results2 = {name:"Jack Sow", score:10}; 
    var results3 = {name:"Tessa Flip", score:15}; 
    var results = [results1, results2, results3]; 

    function listresults() { 
     var text = ""; 
     var total = 0; 
    for (var i=0; i < results.length; i++) { 
     text += results[i].name + " " + results[i].score + "<br>"; 
    } 
    document.getElementById('message').innerHTML = text; 
    } 

Arrayメソッドを使用することをお勧めいたしますJsfiddle example

0

です(マップ、結合)の代わりに純粋なループの

function begin() { 
 
     listresults(); 
 
    } 
 
    
 
    var results1 = {name:"John Smith", score:16}; 
 
    var results2 = {name:"Jack Sow", score:10}; 
 
    var results3 = {name:"Tessa Flip", score:15}; 
 
    var results = [results1, results2, results3]; 
 
    
 
    function listresults() { 
 
     document.getElementById('message').innerHTML = 
 
     results.map(function(item) { 
 
      return item.name + ' ' + item.score; 
 
     }).join('<br>'); 
 
      
 
     document.getElementById('total').innerHTML = 
 
     results.map(function(item) { 
 
      return item.score; 
 
     }).reduce(function(sum, score) { 
 
      return sum + score; 
 
     }, 0); 
 
    }
<button onclick="begin()">begin</button> 
 
<br /> 
 
<div id="message"></div> 
 
<div>total: <span id="total">0</span></div>

+0

ありがとう!もう1つの質問ですが、どのようにしてすべてのスコアを合計できますか?たとえば、この例では41が合計になります。あなたのforループで –

+0

を実行するだけです。合計+ = results [i] .score; forループconsole.logの後またはそれを使用してください – warl0ck

+0

@JDoeは上記の例で合計スコアを追加しました –

0

results1, results2,などのオブジェクトを配列'results'にプッシュしています。 そこで、以下に示すように、オブジェクトのプロパティにアクセスする必要があり、配列を反復しつつ:

function listresults() { 
     var text = ""; 
     var total = 0; 
     var i; 
    for (i in results) { 
     text += results[i]['name'] + ' ' + results[i]['score'] + "<br>"; 
    } 
1

Iは、第2の配列の長さが同じであることをチェックします。次に、forループを使用して反復:

final int timeLength = TIME.length; 
if (timeLength != stat.size()) { 
    //something may not be right 
} 
for (int i = 0; i < timeLength; i++) { 
    System.out.println(time[i]+" "+stat.get(i)); 
} 
0

使用Array.map()Array.join()

var results1 = {name:"John Smith", score:16}; 
 
var results2 = {name:"Jack Sow", score:10}; 
 
var results3 = {name:"Tessa Flip", score:15}; 
 
var results = [results1, results2, results3]; 
 

 
var res = results.map(item => { return item.name+ " " +item.score }); 
 

 
console.log(res.join(", "));