尝试在下面生成一个由两部分组成并推在一起的随机名称,我需要帮助制作它,以便它打印到屏幕上,以便它每次都会选择三个选项之一有时它什么也不选择。我是 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()}!`);
简单的方法是创建函数,它返回数组的元素之一,而不需要任何 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)}!`);
Math.random()
随机选取 [0;1[
如果你做 x10 你最终会得到这个范围 [0;10[
但你只有 3 个值(索引 0、1 和 2),所以当它选择 3 或以上时,你最终什么也没有选择。
你需要找到一种方法来选择 [0,3[ 以确保你有一个与你的随机数相对应的值
您的代码中有几个问题:
firstHalf
和 secondHalf
不 return
任何东西。Math.floor(Math.random() * 10)
会产生介于 0
和 9
之间的随机数,而您只有 3
选项。将 10
替换为 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;
};
如果您使用返回最小值和最大值之间的数字的函数,您可以执行以下操作。检查评论中提到的以下链接@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)];
如果您使用 npm,有一个 javascript 库可以让您生成随机名称(这是相当新的)
我才开始使用它,因为他们有一些非常好的设置 tbh
您只需要使用 npm “npm install nameforgejs” 安装它。我不知道他们是否可以在没有 npm 的情况下使用
你做错了,不要使用 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)];