2017-05-17 25 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

那是因为要附加的对象,而不是他们的价值观的 尝试:'文字+ =结果[我] .name +“”+ results [i] .score +“
”;' – warl0ck

+0

apending object try this text + = 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; 
    } 

这里是一个Jsfiddle example

0

建议您使用Array方法(地图,加入)而不是纯的环

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

谢谢!还有一个问题,我如何能够总计所有的分数?例如,在这种情况下,总数是41。 –

+0

在你的for循环中只需要完成+ = results [i] .score;并在for循环console.log它或使用它 – warl0ck

+0

@ J.Doe在上面的例子中添加总分 –

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

我首先检查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(", "));