在JS上获得相同的结果

时间:2020-06-03 13:26:37

标签: javascript

var luckyNumbers1 = [1, 2, 3, 4, 5, 6, 7];

var luckyNumber1 = luckyNumbers1[Math.floor(Math.random () * 7)];

console.log ("Your winning numbers are " + luckyNumber1 + ", " +
luckyNumber1 + ", " + luckyNumber1 + "!");

为什么我会得到相同的一组数字?我注意到,如果我进行更多的luckyNumbers设置将有所不同。但是,为什么Javascript只使用1种方法来随机化此变量的数量呢? 例如:

" Your winning numbers are 1, 1, 1!"
" Your winning numbers are 5, 5, 5!"

谢谢,祝您编程愉快!

5 个答案:

答案 0 :(得分:3)

因为一旦定义了变量luckyNumber1,它就不会被更改,无论它被引用了多少次,除非它被覆盖(您永远不会在代码中覆盖它)。

答案 1 :(得分:2)

var luckyNumbers1 = [1, 2, 3, 4, 5, 6, 7];

var getLuckyNumber1 = () => luckyNumbers1[Math.floor(Math.random() * 7)];

console.log ("Your winning numbers are " + getLuckyNumber1() + ", " +
getLuckyNumber1() + ", " + getLuckyNumber1() + "!");

因为您使用的是相同的变量,所以您要为luckyNumber1分配一个值,而只是重复使用该值而不会重新生成随机数。使其具有功能就可以了。

答案 2 :(得分:1)

使用功能。

var luckyNumbers1 = [1, 2, 3, 4, 5, 6, 7];

function luckyNumber1() {
  return luckyNumbers1[Math.floor(Math.random () * 7)]
  }

console.log ("Your winning numbers are " + luckyNumber1() + ", " +
luckyNumber1() + ", " + luckyNumber1() + "!");

答案 3 :(得分:0)

这是代码的预期行为。您必须了解,分配给luckyNumber1的值仅被评估一次,因此代码的Math.random()部分仅运行一次。

您应该将代码放入函数中,以使其多次调用。 另外,您应该使用constlet而不是var(请参阅Const in JavaScript: when to use it and is it necessary?)。

正确的代码应如下所示:

const luckyNumbers = [1, 2, 3, 4, 5, 6, 7];

const drawLuckyNumber = () => {
    return luckyNumbers[Math.floor(Math.random () * 7)];
}

console.log ("Your winning numbers are " + drawLuckyNumber() + ", " +
drawLuckyNumber() + ", " + drawLuckyNumber() + "!");

答案 4 :(得分:0)

每个人都将相同答案的不同版本扔掉。您需要每次都生成一个新值,而不是一次生成一个值并一遍又一遍地引用它。我会用rando.js来做到这一点,以使随机性更简单并且更具可读性,但这只是一个偏好。这里所有的答案都起作用。

var luckyNumbers1 = [1, 2, 3, 4, 5, 6, 7];
console.log ("Your winning numbers are " + rando(luckyNumbers1).value + ", " + rando(luckyNumbers1).value + ", " + rando(luckyNumbers1).value + "!");
<script src="https://randojs.com/1.0.0.js"></script>

如果要使用此代码,请不要忘记将script标签粘贴到html文档的头部。