我已经找到了答案,但我也不确定我是否使用正确的措辞给我一个很好的搜索结果。所以没有进一步的麻烦。
我正在尝试用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)];
}
也许我需要动态变量,但我不确定如何将文本转换为var名称。
由于
答案 0 :(得分: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');
它没有什么特别之处,可以锐化几个部分,但它具有功能性,让您了解如何完成它。
答案 1 :(得分: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
}
该代码未经测试,但它至少应该在概念上有效。
答案 2 :(得分: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;
}