循环文件夹中的文件数组

时间:2014-05-17 20:36:48

标签: javascript arrays json

我正在制作一个RPG,并希望加载由Levels按文件夹分隔的对话框.json。每个Level文件夹都有所有任务对话框.json,即使它尚未由玩家完成。

文件夹结构:

enter image description here

我发送一个数组,其中包含玩家已经完成的任务(上面用红色框):

jsonFilesArray = ["101", "102", "103", "104", "201"];

allLevelsArray = [1, 2]

我想动态遍历Levels个文件夹,只查看已完成的任务编号(jsonFilesArray)。

此代码的工作方式是,它会循环遍历所有级别,搜索可能不在其文件夹中的文件。 (例如:当它循环通过Level 2文件夹时,它将找不到quest_101.json,因此它会中断。)

$.each(allLevelsArray, function (i, levelNum) { 
    $.each(jsonFilesArray, function (i, jsonQuestID) {  
        $.getJSON("dialog/Level "+levelNum+"/quest_"+jsonQuestID+".json", function(json) {
            //do stuff 
        });
    });
});

如何可以动态遍历所有级别文件夹,只搜索jsonFilesArray中给出的任务?我甚至不想担心循环Levels文件夹。

谢谢

1 个答案:

答案 0 :(得分:2)

如果你在jsonFilesArray中存储关卡,为什么甚至会有allLevelsArray呢?

为什么不像这样构建数组:

jsonFilesArray = ["1-01", "1-02", "1-03", "1-04", "2-01"];

然后像这样循环:

$.each(jsonFilesArray, function (i, jsonQuestID) {
    var level = jsonQuestID.slice(0, jsonQuestID.indexOf('-'));
    var quest = jsonQuestID.slice(jsqonQuestID.indexOf('-') + 1);
    $.getJSON("dialog/Level "+ level +"/quest_"+ (level + quest) +".json", function(json) {
        //do stuff 
    });
});

或者如果您将所有文件保存在同一个文件夹中(考虑到您的命名约定,这是完全可行的),并假设您的原始数组:

$.each(jsonFilesArray, function (i, jsonQuestID) {
    $.getJSON("dialog/quest_"+ jsonQuestID +".json", function(json) {
        //do stuff 
    });
});

如果每个级别迭代都需要做任何具体的事情,我建议使用二维数组或对象数组:

jsonFilesArray = [{level: 1, quests: ["01", "02", "03", "04"]}, {level: 2, quests: ["01"]}];

$.each(jsonFilesArray, function (i, levelObj) {
    //do stuff with level
    $.each(levelObj.quests, function (i, quest) {
        $.getJSON("dialog/quest_"+ (levelObj.level + quest) +".json", function(json) {
            //do stuff 
        });
    });
});