1

我正在尝试生成一个高尔夫评分系统。在这个系统中,我想将用户拥有的点数与理想的点数进行比较。

每个洞的理想积分总和为 2。因此,当第 1 个洞后的用户获得 2 分时,回报应为 0。如果下一个洞的用户获得 3 分,则回报应为 1。如果他只获得1分应该是-1。

有些我怎么不能让它工作!?!?

这是我的演示:

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/

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

4

2 回答 2

2

您的 for 循环没有对这些值求和,因为这些值已使用该split()方法转换为字符串。

我无法准确理解脚本应该做什么,但如果你改变

var r = thisNumber[1];

var r = parseInt(thisNumber[1]);

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

此外,当对象的值尚未定义时,您将获得未定义的值。在你的 for 循环中,你应该这样做:

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

我已将更改应用于您的小提琴

于 2013-07-19T18:30:05.463 回答
1

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

  • 一个奇怪的循环条件。当nis"1"时,它将循环l直到"1"+1== "11"。这样,undefined来自不存在属性的许多零甚至 sum 都会被求和。
  • 总和本身是有缺陷的。它不会添加,而是进行字符串连接。0+ "1"+"0"+"0" 是"0100",不是1。此外,当您连接时undefined,结果甚至不会是数字。您可能alerttotalpoints.

当你要从idealPoints你得到的中减去它时NaN,它不会显示出来。

要修复它,只需将nandr转换为数字(通过一元加号,或使用parseInt或其他):

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

更正小提琴

于 2013-07-19T18:48:05.347 回答