0

我的学校让我开发一个可以记录作业,显示时间表等的网络应用程序。我使用 localStorage 对象来存储每个作业,然后将它们检索并放入多维数组中。

我有一个看起来像这样的数组:(使用占位符等标题!)

1hvfkjdvhjh463574hdv
   0 : history
   1 : title
   2 : description
   3 : setdate
   4 : duedate
   5 : importance

1hft6ry4uyguy
   0 : art
   1 : title
   2 : description
   3 : setdate
   4 : duedate
   5 : importance

1ehfhhrewvfbjvds63
   0 : geography
   1 : title
   2 : description
   3 : setdate
   4 : duedate
   5 : importance

后跟随机字符的 1 代表 localStorage 对象的类别(1 表示作业 - 与时间表相反,等等)和作业的唯一“id”。

除了对数组进行排序/排序之外,一切都很好。

以下方法似乎不起作用:

homework.sort(function(a, b) {
    if (a[0] < b[0]) return  1;
    if (a[0] > b[0]) return -1;
    return 0;
});

for(var x in homework) {
    document.write(homework[x] + "<br />");
}

想要的效果是,在for循环中,数组按课程排序,艺术、历史、地理...

4

1 回答 1

0

在你的评论中你说

var i = 0, oJson = {}, sKey;
homework = new Array();
for (;sKey = window.localStorage.key(i); i++) {
    oJson[sKey] = JSON.parse(window.localStorage.getItem(sKey));
    if(sKey.substring(0,1) === "1") { homework[sKey] = oJson[sKey]; }
}

使用homework[sKey]意味着您将属性添加到数组中,就好像它是一个对象一样,而不是将新项目添加到您的数组中,就像它是一个列表一样。您无法对这些属性进行排序。

尝试创建homework以在表单中包含项目[sKey, oJson[sKey]]

var i = 0, oJson = {}, sKey,
    homework = [];                             // Array literal
while (sKey = window.localStorage.key(i++)) {  // same loop using while
    oJson[sKey] = JSON.parse(window.localStorage.getItem(sKey));
    if(sKey.charAt(0) === "1")                 // test first char
        homework.push([sKey, oJson[sKey]]);    // Using `homework` as Array
}

现在,当您对数组项进行排序时,您将希望按第一个索引进行排序,就像您之前尝试的那样。

于 2013-07-13T15:58:43.603 回答