首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数w/随机返回数组正在设置固定的结果- javascript

函数w/随机返回数组正在设置固定的结果- javascript
EN

Stack Overflow用户
提问于 2017-05-07 00:37:31
回答 1查看 69关注 0票数 0

我目前正在为自定义名称生成器创建随机的单词部分。每个值与1-2个其他值合并,以创建自定义名称。问题是,我希望某些单词部分包含随机字母。

我现在有一个数组设置,每个随机字部分和一个函数,链接到这个随机字母创建者。问题是,当数组第一次运行时,它会将这些字母设置为特定的东西。因此,它使输出相同(对于那些“自定义”字母)。

我的代码如下:

代码语言:javascript
复制
//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时这样结束。每次都需要一个完全不同的(没有重新加载脚本的)。在每次调用数组中的函数以防止相同的字母输出时,如何调用它(分配随机字母)?

每次调用函数时,是否应该将数组自身设置为其原始状态?哪个工作是最好的(重新定义数组,还是其他什么)?

还在找人帮忙。

EN

回答 1

Stack Overflow用户

发布于 2017-05-07 01:19:40

控制台中出现了一些错误。在这里发布之前,一定要检查它,如果有错误的帖子也是如此。

代码语言:javascript
复制
//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

你能澄清一下吗

在每次调用数组时,使随机字母不同的最有效方法是什么?

一种选择是对数组进行洗牌,但随机性本身就是一个挑战。

代码语言:javascript
复制
// 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的错误:

代码语言:javascript
复制
(index):51 Uncaught ReferenceError: randomNumber is not defined
    at randomLetter ((index):51)
    at window.onload ((index):66)
randomLetter @ (index):51
window.onload @ (index):66

另外,您能解释为什么对象保留函数而不是数组吗?

这个问题还不清楚。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43826706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档