努力让随机名称生成器正常工作

问题描述 投票:0回答:6

尝试在下面生成一个由两部分组成并推在一起的随机名称,我需要帮助制作它,以便它打印到屏幕上,以便它每次都会选择三个选项之一有时它什么也不选择。我是 JavaScript 新手。

const randomName = {
   prefix: ['Bramble', 'Lion', 'Owl'],
   suffix: ['Paw', 'Throat', 'Tail']
};

let firstHalf = () => {
switch(Math.floor(Math.random() * 10)){
  case 0:
      console.log(randomName.prefix[0])
  break;
  case 1:
      console.log(randomName.prefix[1])
  break;
  case 2:
      console.log(randomName.prefix[2])
  break;
};
};

let secondHalf = () => {
switch(Math.floor(Math.random() * 10)){
    case 0:
        console.log(randomName.suffix[0])
    break;
    case 1:
        console.log(randomName.suffix[1])
    break;
    case 2:
        console.log(randomName.suffix[2])
    break;
  };
};


console.log(`Your warrior name is ${firstHalf()} ${secondHalf()}!`);

javascript random generator
6个回答
1
投票

简单的方法是创建函数,它返回数组的元素之一,而不需要任何 case switch 循环

const randomName = {
   prefix: ['Bramble', 'Lion', 'Owl'],
   suffix: ['Paw', 'Throat', 'Tail']
};
function getRand(arr){
  return arr[Math.floor(Math.random()*arr.length)]
}
console.log(`Your warrior name is ${getRand(randomName.prefix)} ${getRand(randomName.suffix)}!`);


0
投票

Math.random()
随机选取 [0;1[ 如果你做 x10 你最终会得到这个范围 [0;10[ 但你只有 3 个值(索引 0、1 和 2),所以当它选择 3 或以上时,你最终什么也没有选择。

你需要找到一种方法来选择 [0,3[ 以确保你有一个与你的随机数相对应的值


0
投票

您的代码中有几个问题:

  1. firstHalf
    secondHalf
    return
    任何东西。
  2. 您的
    Math.floor(Math.random() * 10)
    会产生介于
    0
    9
    之间的随机数,而您只有
    3
    选项。将
    10
    替换为 3`。或者...使用数组的长度。
  3. 如果您使用的是开关的条件,则不需要
    switch
    语句:
switch(myNumber){
  case 0:
    doStuffWith[0];
  break;
  case 1:
    doStuffWith[1];
  break;
  case 2:
    doStuffWith[2];
  break;
};

可以替换为:

doStuffWith[myNumber]

所以,总的来说,

firstHalf
可能应该是这样的:

let firstHalf = () => {
  const name = randomName.prefix[Math.floor(Math.random() * randomName.prefix.length)];
  console.log('firstHalf', name);
  return name;
};

0
投票

如果您使用返回最小值和最大值之间的数字的函数,您可以执行以下操作。检查评论中提到的以下链接@Reyno,找到这样的函数:在 JavaScript 中生成两个数字之间的随机数

正如 Cerbrus 不知何故已经写道:

如果该函数仅返回名称数组中表示的数字,则不需要 switch case。

const randomName = {
  prefix: ['Bramble', 'Lion', 'Owl'],
  suffix: ['Paw', 'Throat', 'Tail']
};

firstHalf = randomName.prefix[randomNumberBetween(0, 3)];
secondHalf = randomName.suffix[randomNumberBetween(0, 3)];

或者为了使其更可靠,请使用名称数组的长度,这样在添加新名称时就不必总是更改最大值

const randomName = {
  prefix: ['Bramble', 'Lion', 'Owl'],
  suffix: ['Paw', 'Throat', 'Tail']
};

firstHalf = randomName.prefix[randomNumberBetween(0, randName.prefix.length)];
secondHalf = randomName.suffix[randomNumberBetween(0, randName.suffix.length)];

0
投票

如果您使用 npm,有一个 javascript 库可以让您生成随机名称(这是相当新的)

我才开始使用它,因为他们有一些非常好的设置 tbh

您只需要使用 npm “npm install nameforgejs” 安装它。我不知道他们是否可以在没有 npm 的情况下使用


-1
投票

你做错了,不要使用 switch 语句并单独编码每个值,这是非常糟糕的做法。 现在,你的随机函数也是错误的,你想要一个 0 到 2 之间的整数并生成 0 到 10 之间的 FLOAT。 您应该执行以下操作来生成随机数:

function random(min, max) {
    let delta = max - min;
    return min+Math.round(Math.random()*delta);
}

要获取数组中的随机值,您可以这样做:

let firstHalf = randomName.prefix[random(0, randomName.prefix.length-1)];
© www.soinside.com 2019 - 2024. All rights reserved.