用字母和数字排序多维数组

时间:2013-07-13 15:04:41

标签: javascript arrays local-storage

我的学校要求我开发一个可以记录家庭作业,显示时间表等的网络应用程序。我使用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循环中,数组按照课程,艺术,历史,地理位置排序......

1 个答案:

答案 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
}

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