JavaScript: Math.random() 返回相同的数字。我该如何阻止呢?

JavaScript: Math.random() returning the same numbers. How do I stop this?

我有一个 JavaScript 字符串数组,我想从数组中随机选择一个字符串。但是,当它在 Edge 和 Chrome 中运行时,它不会抛出任何错误,但每次都会从数组中选择相同的字符串。我查看了 Stack Overflow 上的其他答案,但其中 none 似乎有所帮助。这是我的代码:

var arr = ["string1", "string2", "string3", "string4", "string5", "string6", "string7"]; /* 100 quotes in the real array. */
var dis = parseInt(prompt("Enter the number of strings you would like to display."));

if(dis > arr.length) {
    alert("You have entered a number that is too great.");
} else {
    for(var n = 1; n <= dis; n++) {
        document.write(arr[(Math.random() * (arr.length - 1))] + "<br/>");      
    } 
}

有人有任何代码片段可以确保它不会选择相同的字符串吗?

可能是因为您需要将 Math.random 转换为整数。 试试这个。

document.write(arr[parseInt((Math.random()*(arr.length-1)))]+"<br/>");

你可以试试:

function getRandomInt(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min)) + min;
}

//////////////

document.write(arr[getRandomInt(0, arr.length-1)]+"<br/>");

通过 Math.floor().

四舍五入使用 int 作为索引

var arr = ["string1", "string2", "string3", "string4", "string5", "string6", "string7"]; /* 100 quotes in the real array. */
var dis = parseInt(prompt("Enter the number of strings you would like to display."));

if(dis > arr.length) {
    alert("You have entered a number that is too great.");
}
else {
    for(var n = 1; n <= dis; n++) {
        document.write(arr[Math.floor(Math.random() * arr.length)] + "<br/>");      
    } 
}