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

combining text into a variable name in javascript

本文关键字:变量名 组合 文本 JavaScript      更新时间:2023-09-26

我一直在寻找答案,但我也不确定我是否使用正确的措辞来给我一个好的搜索结果。所以没有进一步的嘶吼。

我正在尝试在 JavaScript 中制作一个随机名称生成器,如果可以避免的话,我不想要 300 行开关。如果可以避免的话,没有Jquery,主要是因为我想学习如何用JS编码,没有其他原因。但是如果我必须使用Jquery,那就这样吧。学习和一切。

这个想法是脚本将采用种族,性别,然后从数组中随机选择名字,姓氏和专业。我可以让它在 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)];

}

也许我需要动态变量,但我不确定如何将文本转换为变量名称。

谢谢

我认为一个物体可能会让你的生活更轻松一些,但这个想法通常与你看起来拥有的相同。

在 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
}

该代码未经测试,但至少应该在概念上解决。

这是我粗略地拼凑起来的。

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');

它没什么特别的,可以锐化几个位,但它是功能性的,让你知道如何完成它。

我得到的解决方案,很大程度上是基于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;
}