在数组

时间:2016-01-15 13:00:46

标签: javascript arrays sorting templates

我搞砸了我的代码,作为初学者寻求建议。我想要的是:在测验中输出用户列表及其总时间。用户将他的名字添加到
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>

请记住,我完全不确定我在这里和初学者的第二部分中做了什么。任何帮助非常感谢。提前谢谢!

1 个答案:

答案 0 :(得分:0)

看起来你可以在localStorage上阅读更多内容。您试图在displayHighScore函数中错误地访问数据。

看起来你似乎正在尝试计算一个时间段,这会让你在localStorage中存储d会更有意义,因为当你计算totalTime当前你正在尝试执行数学时在一个字符串上。这个计算应该是

var totalTime = Date() - localStorage.startTime;

(假设您将d存储为startTime将为您提供测验所用的时间。此时您想要应用您当前在第一个代码块中应用的格式

最后,一旦你将对推到highscoreArray并对其进行排序,你可能想要存储数组,这样你也可以看到以前的高分。这里要注意三件事:

  1. 当您将字符串传递给排序时,您的排序方法将按字母顺序排序。您可以修改function(a,b)代码以生成实际需要的排序方法。
  2. 在推送和排序之前,您还需要在任何选择存储它的位置检索高分数组表单
  3. 如果您将数组存储在localStorage中,它将只显示该计算机上已实现的时间。
  4. 排序方法

    在对数组进行排序时,它将填充Dave 01:20:14Johnny 00:45:02等字符串。如果按字母顺序对这些字体进行排序,名称将变为有序(Dave然后是Johnny),但您希望按时间排序。

    为此,在排序功能中,您需要拆分字符串ab,以便比较时间而不是文本:

    ...function(a,b) {
        a_time = a.substr(a.indexOf(' ')+1);
        b_time = b.substr(b.indexOf(' ')+1);
        return a_time-b_time;
    }...