我搞砸了我的代码,作为初学者寻求建议。我想要的是:在测验中输出用户列表及其总时间。用户将他的名字添加到
localstorage和时间戳,代码看起来像这样
name = document.getElementById("name").value;
localStorage.setItem("name", name);
function addZero(i) { // displays time in correct format 00:00:00
if (i < 10) {
i = "0" + i;
}
return i;
}
var d = new Date();
var h = addZero(d.getHours());
var m = addZero(d.getMinutes());
var s = addZero(d.getSeconds());
time = h + ":" + m + ":" + s;
localStorage.setItem("time", time);
});
到目前为止一切顺利。名称和时间已保存。然后是使用5个用户输出数组的棘手部分。我已经涉足了输出:
function displayHighScore (display, result, output) {
display = document.querySelector("#highScoreTmpl");
var highscoreArray = [];
var displayName = JSON.parse(localstorage.getItem.name);
var startTime = JSON.parse(localstorage.getItem.time);
var totalTime = startTime - localStorage.setItem("time");
var paired = displayName.concat(totalTime);
// push user results to array
highscoreArray.push(paired);
// sort array
highscoreArray.totalTime.sort(function(a, b) {
return a - b;
});
//present user results
result = document.querySelector("#highScoreTmpl");
output = highscoreArray.paired.toString();
result.textcontent = output;
}
}
我希望它显示在模板中的HTML页面上。最好是列表元素。我应该使用for循环吗?的foreach?
<h2>[ Highscore ]</h2>
<template id="highScoreTmpl">
</template>
请记住,我完全不确定我在这里和初学者的第二部分中做了什么。任何帮助非常感谢。提前谢谢!
答案 0 :(得分:0)
看起来你可以在localStorage上阅读更多内容。您试图在displayHighScore
函数中错误地访问数据。
看起来你似乎正在尝试计算一个时间段,这会让你在localStorage中存储d
会更有意义,因为当你计算totalTime
当前你正在尝试执行数学时在一个字符串上。这个计算应该是
var totalTime = Date() - localStorage.startTime;
(假设您将d
存储为startTime
将为您提供测验所用的时间。此时您想要应用您当前在第一个代码块中应用的格式
最后,一旦你将对推到highscoreArray
并对其进行排序,你可能想要存储数组,这样你也可以看到以前的高分。这里要注意三件事:
function(a,b)
代码以生成实际需要的排序方法。排序方法
在对数组进行排序时,它将填充Dave 01:20:14
和Johnny 00:45:02
等字符串。如果按字母顺序对这些字体进行排序,名称将变为有序(Dave然后是Johnny),但您希望按时间排序。
为此,在排序功能中,您需要拆分字符串a
和b
,以便比较时间而不是文本:
...function(a,b) {
a_time = a.substr(a.indexOf(' ')+1);
b_time = b.substr(b.indexOf(' ')+1);
return a_time-b_time;
}...