我正在努力创造一个高尔夫评分系统。在这个系统中,我想比较用户拥有的点数与理想的点数之和。
每个洞的理想点数为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/
希望得到帮助并提前致谢: - )
答案 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)
问题是您的n
和r
变量是字符串,而不是解析为数字。这将导致
n
为"1"
时,它会循环l
,直到"1"+1
== "11"
。这样就可以总结出来自不存在的属性的多个零甚至总和undefined
。0
+&#34; 1&#34; +&#34; 0&#34; +&#34; 0&#34;是"0100"
,而不是1
。此外,当您连接undefined
结果甚至不是数字时。您可能在alert
totalpoints
时看到了这些内容。如果您要从idealPoints
获得NaN
,那么您将无法显示该内容。
要解决此问题,只需将n
和r
投射到数字(通过unary plus,或使用parseInt
or something else):
var n = + thisNumber[0];
var r = + thisNumber[1];