2013-07-19 45 views
1

我想产生一个高尔夫球记分系统的理想之和。在这个系统中,我想比较用户的点数与理想的点数之和。比较点的总和来分

每个孔点的理想的总和是2。因此,当第1'后孔中的用户具有2个点的返回应该是0。如果在下一孔用户进行3点然后返回应为1。如果他只得1分,那应该是-1。

一些我怎么能不得到这个工作!?!?

这里是我的demoscript:

var myObject = { 
    0: 0, 
    1: 0, 
    2: 0, 
    3: 0, 
    4: 0, 
    5: 0, 
    6: 0, 
    7: 0, 
    8: 0 
}; 

$('.clickme').click(function() { 

    var thisNumber = $(this).attr("data-id"); 
    var thisNumber = thisNumber.split('-'); 
    var n = thisNumber[0]; 
    var r = thisNumber[1]; 

    myObject[n] = r; 

    var totalpoints = 0; 

    for (var l = 0; l < n + 1; l++) { 
     totalpoints += myObject[l]; 
    } 

    //alert("Totalpoints: "+totalpoints); 

    // ADDING POINTS FOR EACH HOLE TO GET THE CURRENT IDEAL POINT // 
    var x = n; 
    var idealpoints = (x * 2) + 2; 

    // COMPARING IDEAL POINTS WITH HE PLAYERS ACTUAL POINTS // 
    var escore = totalpoints - idealpoints; 

    $('#tpoints').html(escore); 
    $('#theObject').html(JSON.stringify(myObject, null, 4)); 

}); 

我的麻烦似乎来自这样的:

for (var l = 0; l < n + 1; l++) { 
      totalpoints += myObject[l]; 
     } 

我认为我已经尝试了一切,但解决不了这个。

一个的jsfiddle例子在这里:http://jsfiddle.net/jmansa/AtkVp/

提前希望能帮助和感谢:-)

回答

2

您的循环,因为该值已转换为字符串与split()方法不值相加。

我有什么脚本应该做的事很难理解,但如果你改变

var r = thisNumber[1]; 

var r = parseInt(thisNumber[1]); 

r将是将添加到totalpoints作为一个整数而不是被连接起来以它作为一个字符串

此外,你得到不确定的值时,该对象的值都不会尚未定义。在你的循环,你应该这样做:

if(myObject[l]) { 
    totalpoints += myObject[l]; 
} 

我申请我的改变你的fiddle

1

的问题是,你的nr变量是字符串,而不是解析为数字。这将导致

  • 一个奇怪的循环状态。当n"1",它将循环l直到"1"+1 == "11"。这样,来自不存在的属性的许多零和甚至总和将被总结。
  • 总和本身是有缺陷的。它不会添加,而是会进行字符串连接。 0 +“1”+“0”+“0”是"0100",而不是1。另外,当连接undefined时,结果甚至不会是数字。您可能在alert中看到了那些totalpoints

当你打算从idealPoints减去你得到的NaN,那将不会显示。

为了修正它,只要投nr数字(经由unary plus,或者使用parseInt or something else):

var n = + thisNumber[0]; 
var r = + thisNumber[1]; 

Corrected fiddle