2016-03-11 51 views
2

我已經找到了這個答案,但即時通訊也不確定即時通訊使用正確的措辭給我一個很好的搜索結果。所以沒有進一步的adoo。在javascript中將文本合併爲變量名稱

我想在JavaScript中製作一個隨機名稱生成器,並且如果可以避免的話,我不想要300行的開關。沒有Jquery,如果可以避免的話,主要是因爲我想學習如何在JS中編寫代碼,除此之外沒有其他原因。但是,如果我必須使用Jquery,那就這樣吧。學習和所有。

這個想法是,腳本將採取種族,性別,然後從數組中隨機選擇名字,姓氏和proffesion。我可以在IF語句和開關中使用它。但我想嘗試儘可能少的代碼。下面的例子是針對人類的,但是這個想法幾乎可以用於任何幻想種族......矮人,精靈......對於龍與地下城龍來說是這樣。也許稍後會使用JSON來處理數組數據,但那是晚點。

var HumanFemale = ["Diane","Laura","Amy"]; 
var HumanMale = ["Steve","Dave","Tony"]; 
var HumanS  = ["Druss","Hale","Taylor"]; 
var Proff  = ["Theif","Mercenary","Soldier"]; 

function chargen(race,gender){ 

var x = race.concat(gender); 
var xs= race.concat('S'); 

     document.getElementById("OutputR").innerHTML= race; 
     document.getElementById("OutputG").innerHTML= gender; 
     document.getElementById("OutputF").innerHTML= x[Math.floor(Math.random()*x.length)]; 
     document.getElementById("OutputS").innerHTML=xs[Math.floor(Math.random()*xs.length)]; 
     document.getElementById("OutputJ").innerHTML=Proff[Math.floor(Math.random()*Proff.length)]; 


} 

也許我需要動態變量,但我不知道如何將文本轉換成變數名稱。

謝謝

+1

http://stackoverflow.com/questions/4244896/dynamically-access-object-property-using-variable – Teemu

+0

謝謝你,貌似我是雙貼。抱歉。 – Kalacia

回答

0

我認爲一個物體可能會讓你的生活變得更容易一些,但是這個想法通常和你所看到的一樣。

在JavaScript中,您可以像數組一樣引用對象的屬性。這意味着如果您有一個可以變量的屬性名稱,則可以使用數組約定來獲取屬性而不是「。」。慣例。

下面是一個例子:

var example = { 
    "first": "hello", 
    "second": "world" 
} 

//Using dot-notation 
alert(example.first); //alerts "hello" 
alert(example.second) //alerts "world" 

//Using array-notation 
alert(example["first"]); //alerts "hello" 
alert(example["second"]); //alerts "world" 

現在,如果我們想要的特性是可變的,我們不能用點符號,但我們可以用數組表示法:

var prop_name = "second"; 

//Using dot-notation 
alert(example.prop_name); //throws an error (undefined property) 

//Using array-notation 
alert(example[prop_name]); //alerts "world" 

所以,如果你創建本質上是一個字典對象,你會發現它更容易/更簡潔的完成你的任務:

var dict = { 
    "Human": { 
     "Male": ["Steve", "Dave", "Tony"], 
     "Female": ["Diane", "Laura", "Amy"], 
     "Surname": ["Druss", "Hale", "Taylor"] 
    }, 
    "Elf": { 
     "Male": [/* names */], 
     "Female": [/* names */], 
     "Surname": [/*names */] 
    } 
} 

function rand_attributes(race, gender) { 
    var first_name_index = Math.floor(Math.random() * dict[race][gender].length), 
     last_name_index = Math.floor(Math.random() * dict[race]["Surname"].length), 
     first_name = dict[race][gender][first_name_index], 
     last_name = dict[race]["Surname"][last_name_index]; 

    //Now first_name and last_name each contain random values 
    //Do what you need to with those values from here 
} 

這段代碼沒有經過測試,但至少在概念上應該是可行的。

+0

這比馬修的帖子容易讓我開始解決這個問題。謝謝。 – Kalacia

0

這就是我粗暴地夾在一起。

var Proff=["Theif","Mercenary","Soldier"]; 

var CharacterName={}; 
CharacterName['human']={}; 
CharacterName['human']['female'] = new Array('Diane','Laura','Amy'); 
CharacterName['human']['male'] = new Array('Steve','Dave','Tony'); 
CharacterName['human']['surname'] = new Array('Druss','Hale','Taylor'); 
//just add more stuff here! 


document.getElementById('OutputR').innerHTML= 'boo'; 

function chargen(race,gender){ 

    document.getElementById('OutputR').innerHTML= race; 
    document.getElementById('OutputG').innerHTML= gender; 
    document.getElementById('OutputF').innerHTML= grabrandom(CharacterName[race][gender]); 
    document.getElementById('OutputS').innerHTML= grabrandom(CharacterName[race]['surname']); 
    document.getElementById('OutputJ').innerHTML= grabrandom(Proff); 

} 

function grabrandom(arrayofvalues){ 
    return arrayofvalues[Math.floor(Math.random()*arrayofvalues.length)]; 
} 

chargen('human','female'); 

沒什麼特別,一對夫婦的位可以削尖,不過它的功能,併爲您提供瞭如何可以實現這個想法。

+0

非常有用謝謝。我從中學到了一點。再次感謝。 – Kalacia

+0

@Kalacia沒問題! – Matthew

0

我得到的解決方案,主要基於xjstratedgebx的響應。

var names = { 
    "Human": { 
     "Female": ["Diane","Laura","Amy"], 
     "Male": ["Steve","Dave","Tony"], 
     "Surname": ["Hall","Young","Taylor"] 
     } 
} 


function namegen(race,gender){ 

var firstname = names[race][gender][Math.floor(Math.random() * names[race][gender].length)]; 
var lastname = names[race]["Surname"][Math.floor(Math.random() * names[race]["Surname"].length)]; 

    document.getElementById("OutputR").innerHTML= "Human"; 
    document.getElementById("OutputG").innerHTML= "Female"; 
    document.getElementById("OutputF").innerHTML= firstname; 
    document.getElementById("OutputS").innerHTML= lastname; 
}