我目前正在为自定义名称生成器创建随机的单词部分。每个值与1-2个其他值合并,以创建自定义名称。问题是,我希望某些单词部分包含随机字母。
我现在有一个数组设置,每个随机字部分和一个函数,链接到这个随机字母创建者。问题是,当数组第一次运行时,它会将这些字母设置为特定的东西。因此,它使输出相同(对于那些“自定义”字母)。
我的代码如下:
//Letters in alphabet in order to generate more random outputs.
var alphabet = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];
//Selects a random letter and outputs a return value.
var randomLetter = function(letterCase) {
var letterID = randomNumber(alphabet.length);
console.log(letterID);
if(letterCase === "C") {
return alphabet[letterID];
} else if(letterCase === "L") {
return alphabet[letterID].toLowerCase();
} else {
console.log("randomLetter function failed to generate a random letter. No set letter case.");
}
};
//Base names for town name generations. Called within a function.
var townNameStart = ["Ji", "Ri", "Li", "We", "Wete", "Lakeside Zi", "Za", "Mount "+randomLetter("C")+randomLetter("L")];如果我运行console.log(townNameStart[7] +" "+ townNameStart[7]);,我希望它输出两个完全不同的字母组合。我不希望它在输出:i.imger.com/YruxwPq.png时这样结束。每次都需要一个完全不同的(没有重新加载脚本的)。在每次调用数组中的函数以防止相同的字母输出时,如何调用它(分配随机字母)?
每次调用函数时,是否应该将数组自身设置为其原始状态?哪个工作是最好的(重新定义数组,还是其他什么)?
还在找人帮忙。
发布于 2017-05-07 01:19:40
控制台中出现了一些错误。在这里发布之前,一定要检查它,如果有错误的帖子也是如此。
//Letters in alphabet in order to generate more random outputs.
var alphabet = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];
function randomNumber(len) {
return Math.round(Math.random() * len)
}
//Selects a random letter and outputs a return value.
var randomLetter = function(lower) {
var letterID = randomNumber(alphabet.length);
if (lower) {
return alphabet[letterID].toLowerCase();
}
return alphabet[letterID];
};
//Base names for town name generations.
var townNameStart = [
"Ji",
"Ri",
"Li",
"We",
"Wete",
"Lakeside Zi",
"Za",
"Mount " + randomLetter() + randomLetter(true),
"Saint " + randomLetter() + randomLetter(true)
];
console.log(townNameStart.join(', '))输出Ji, Ri, Li, We, Wete, Lakeside Zi, Za, Mount Ua, Saint Bn
你能澄清一下吗
在每次调用数组时,使随机字母不同的最有效方法是什么?
一种选择是对数组进行洗牌,但随机性本身就是一个挑战。
// From http://stackoverflow.com/questions/6274339/how-can-i-shuffle-an-array
function shuffle(a) {
for (let i = a.length; i; i--) {
let j = Math.floor(Math.random() * i);
[a[i - 1], a[j]] = [a[j], a[i - 1]];
}
}
//Selects a random letter and outputs a return value.
var randomLetter = function(lower) {
var letterID = randomNumber(alphabet.length);
if (lower) {
return alphabet[letterID].toLowerCase();
}
shuffle(alphabet);
return alphabet[letterID];
};编辑以解决评论:
将代码副本直接粘贴到Plnkr的错误:
(index):51 Uncaught ReferenceError: randomNumber is not defined
at randomLetter ((index):51)
at window.onload ((index):66)
randomLetter @ (index):51
window.onload @ (index):66另外,您能解释为什么对象保留函数而不是数组吗?
这个问题还不清楚。
https://stackoverflow.com/questions/43826706
复制相似问题