将点的总和与理想的点总和进行比较

时间:2013-07-19 18:15:18

标签: javascript jquery for-loop

我正在努力创造一个高尔夫评分系统。在这个系统中,我想比较用户拥有的点数与理想的点数之和。

每个洞的理想点数为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/

希望得到帮助并提前致谢: - )

2 个答案:

答案 0 :(得分:2)

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

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

var r = thisNumber[1];

var r = parseInt(thisNumber[1]);

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

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

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

我已将更改应用于您的fiddle

答案 1 :(得分:1)

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

  • 一个奇怪的循环条件。当n"1"时,它会循环l,直到"1"+1 == "11"。这样就可以总结出来自不存在的属性的多个零甚至总和undefined
  • 总和本身存在缺陷。它不会添加,而是进行字符串连接。 0 +&#34; 1&#34; +&#34; 0&#34; +&#34; 0&#34;是"0100",而不是1。此外,当您连接undefined结果甚至不是数字时。您可能在alert totalpoints时看到了这些内容。

如果您要从idealPoints获得NaN,那么您将无法显示该内容。

要解决此问题,只需将nr投射到数字(通过unary plus,或使用parseInt or something else):

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

Corrected fiddle