簡體   English   中英

多維數組值jQuery

[英]Multidimensional array values jquery

需要一些有關我正在執行的數組腳本的幫助

    skill = [
        //[ID, "NAME", TMLEVEL, Learn, Mastery, Prerequisite, PrerequisiteLvl],
        //Schoolgirl, Fighter
        [0, "Steel Punch", 0, 0, null, null],
        [1, "Shockwave", 1, 1, 2, null],
        [2, "Bull's Eye", 10, 2, 2, null],
        [3, "Burning Rave", 20, 2, 2, null],
        [4, "Shockvibe", 20, 1, 2, null],
        [5, "Sense Breaker", 20, 1, 2, null],
        [6, "Luck Breaker", 20, 1, 2, null],
        [7, "Pumping Heart", 25, 3, 3, skill[3], 1],
        [8, "Armor Breaker", 30, 2, 2, skill[1], 10],
        [9, "Upper Smash", 40, 2, 2, skill[2], 10],
        [10, "Hyper Beat", 45, 4, 3, [skill[2],skill[3]], [10,10]],
        [11, "Tornado Bomb", 50, 3, 3, skill[8], 1]
    ];

我需要在數組中的某些點上再次調用th數組以將數組值放在那里,就像我在這里一樣。 從理論上講,它可以正常工作,沒有任何錯誤,但是當我調用其中的數組時,它說它是“未定義的”。

誰知道不重寫所有內容該怎么辦? (因為我在+-300代碼行中使用了它)。

您將不得不在這里重新考慮整個方法(推薦),或者首先將這些項目設置為null,然后重新運行聲明:

skill = [
    //[ID, "NAME", TMLEVEL, Learn, Mastery, Prerequisite, PrerequisiteLvl],
    //Schoolgirl, Fighter
    [0, "Steel Punch", 0, 0, null, null],
    [1, "Shockwave", 1, 1, 2, null],
    [2, "Bull's Eye", 10, 2, 2, null],
    [3, "Burning Rave", 20, 2, 2, null],
    [4, "Shockvibe", 20, 1, 2, null],
    [5, "Sense Breaker", 20, 1, 2, null],
    [6, "Luck Breaker", 20, 1, 2, null],
    [7, "Pumping Heart", 25, 3, 3, null, 1],
    [8, "Armor Breaker", 30, 2, 2, null, 10],
    [9, "Upper Smash", 40, 2, 2, null, 10],
    [10, "Hyper Beat", 45, 4, 3, null, null],
    [11, "Tornado Bomb", 50, 3, 3, null, 1]
];

skill = [
    //[ID, "NAME", TMLEVEL, Learn, Mastery, Prerequisite, PrerequisiteLvl],
    //Schoolgirl, Fighter
    [0, "Steel Punch", 0, 0, null, null],
    [1, "Shockwave", 1, 1, 2, null],
    [2, "Bull's Eye", 10, 2, 2, null],
    [3, "Burning Rave", 20, 2, 2, null],
    [4, "Shockvibe", 20, 1, 2, null],
    [5, "Sense Breaker", 20, 1, 2, null],
    [6, "Luck Breaker", 20, 1, 2, null],
    [7, "Pumping Heart", 25, 3, 3, skill[3], 1],
    [8, "Armor Breaker", 30, 2, 2, skill[1], 10],
    [9, "Upper Smash", 40, 2, 2, skill[2], 10],
    [10, "Hyper Beat", 45, 4, 3, [skill[2],skill[3]], [10,10]],
    [11, "Tornado Bomb", 50, 3, 3, skill[8], 1]
];

這樣,您要訪問的數組元素已經存在,現在您只是覆蓋它們。

經過漫長的過程,我想出了一個解決方案,它將取代所有先決條件,即使它們有多個層次(例如,skill_3需要Skill_2,而Skill_1也需要...)。

這將要求正確聲明您的skill變量(在您的問題中,並非所有技能都有7個變量)。

以下是該變量的外觀示例:

var skill = [
    //[ID, "NAME", TMLEVEL, Learn, Mastery, Prerequisite, PrerequisiteLvl],
    [0, "Steel Punch",  0,  0,  0,  null,   null],
    [1, "Shockwave",    1,  1,  2,  null,   null],
    [2, "Bull's Eye",   10, 2,  2,  7,      null],
    [3, "Burning Rave", 20, 2,  2,  null,   null],
    [4, "Shockvibe",    20, 1,  2,  null,   null],
    [5, "Sense Breaker",20, 1,  2,  null,   null],
    [6, "Luck Breaker", 20, 1,  2,  null,   null],
    [7, "Pumping Heart",25, 3,  3,  3,      1],
    [8, "Armor Breaker",30, 2,  2,  7,      10],
    [9, "Upper Smash",  40, 2,  2,  2,      10],
    [10,"Hyper Beat",   45, 4,  3,  [2,3],  [10,10]],
    [11,"Tornado Bomb", 50, 3,  3,  8,      1]
];

現在,我想到了一個函數setPrerequisites() ,它將以一種技巧遞歸設置其先決條件:

Array.prototype.setPrerequisites = function(){
    if (typeof this[5] === "number")
    {
        this[5]=skill[getPosOfSkill(this[5])];
        this[5].setPrerequisites();
    }
    else if (this[5] instanceof Array)
    {
        if (this[5].isSkill()) this[5].setPrerequisites();
        else
        {
            for(var i = 0; i < this[5].length; i++)
            {
                this[5][i] = skill[getPosOfSkill(this[5][i])];
                this[5][i].setPrerequisites();
            }
        }
    }
}

此函數使用isSkill()確定數組是技能還是技能ID數組:

Array.prototype.isSkill = function(){
    return this.length==7 && typeof this[1]==="string";
}

它還會使用getPosOfSkill(id)查找正確的技能,以防您的技能getPosOfSkill(id)特定順序列出或ID丟失:

function getPosOfSkill(id){
    for(var i=0; i<skill.length; i++) if (skill[i][0]==id) return i;
    return false;
}

您要做的就是聲明您的skill變量,然后填寫它:

for (var i = 0; i < skill.length; i++) skill[i].setPrerequisites();

// if you want to see the results
console.log(skill);

這是一個jsFiddle演示

我認為我找到了一種簡單的方法,但是如果在之后定義它仍然存在問題,但是由於我只調用之前定義的值,所以現在沒有問題。

但是,如果有人知道更好的方法,請告訴我。

這是我仍然只使用數組的方法:

    var skill = [];
    skill[0] = [0, "Steel Punch", 0, 0, null, null];
    skill[1] = [1, "Shockwave", 1, 1, 2, null];
    skill[2] = [2, "Bull's Eye", 10, 2, 2, null];
    skill[3] = [3, "Burning Rave", 20, 2, 2, null];
    skill[4] = [4, "Shockvibe", 20, 1, 2, null];
    skill[5] = [5, "Sense Breaker", 20, 1, 2, null];
    skill[6] = [6, "Luck Breaker", 20, 1, 2, null];
    skill[7] = [7, "Pumping Heart", 25, 3, 3, skill[3], 1];
    skill[8] = [8, "Armor Breaker", 30, 2, 2, skill[1], 10];
    skill[9] = [9, "Upper Smash", 40, 2, 2, skill[2], 10];
    skill[10] = [10, "Hyper Beat", 45, 4, 3, [skill[2],skill[3]], [10,10]];
    skill[11] = [11, "Tornado Bomb", 50, 3, 3, skill[8], 1];

這樣我就定義了它們,但我仍在使用數組(我想睡一晚讓我覺得好多了:P)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM