在javascript中将文本组合成变量名称

时间:2016-03-11 16:29:16

标签: javascript arraylist

我已经找到了答案,但我也不确定我是否使用正确的措辞给我一个很好的搜索结果。所以没有进一步的麻烦。

我正在尝试用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名称。

由于

3 个答案:

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