我的学校要求我开发一个可以记录家庭作业,显示时间表等的网络应用程序。我使用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循环中,数组按照课程,艺术,历史,地理位置排序......
答案 0 :(得分: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]
意味着您要向Array添加属性,就好像它是一个Object,而不是像向列表那样向Array添加新项。您无法对这些属性进行排序。
尝试创建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
}
现在,当您对数组项进行排序时,您将希望按照您之前尝试的方式对第一个索引进行排序。