随机返回阵列的功能是设置固定结果-JavaScript



我当前正在为创建自定义名称生成器的随机单词部分。每个值与其他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.imgur.com/yruxwpq.png。它需要每次都具有>完全不同的字母(没有重新加载脚本(。每次调用数组中的函数如何(分配随机字母(以防止相同的字母输出?

每次调用函数时,我是否应该将数组设置为原始状态?哪个工作是最好的(重新定义数组或其他方法(?

仍在寻找帮助。

您在控制台中有一些错误。在此处发布之前,请务必检查一下,如果还有一个错误帖子。

//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

另外,您可以解释如何&为什么该对象保留函数与数组?

这个问题不清楚。

最新更新