如何从数组中获取随机值

How to get random value from an array?

本文关键字:获取 随机 数组      更新时间:2023-09-26

这是我想到的,但它不起作用。我没有输出。

Javascript.js

function randomnamegen() {
    var names = ["Mango", "Pul", "Bat", "Tim", "Mh", "Hei"];
    var namein = names(Math.floor((Math.random() * 5) + 0));
    document.getElementById("name").innerHTML = namein;
}

index.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Cherry Cheese Danish</title>
</head>
<body>
<button type="button" onclick="randomnamegen()">Click Me!</button>
    <p id="name"></p>
    <script src="JavaScript.js"></script>
</body>
</html>

我得到一个Uncaught TypeError:对象不是googlechrome控制台中的函数JavaScript.js:3。

对数组使用[]方括号:

var namein = names[ Math.floor((Math.random() * 5) + 0) ];

此外,不用严格使用5(当你有6个时),你可以让JS来计数:

Math.random() * names.length

function randomnamegen() {
    var names = ["Mango", "Pul", "Bat", "Tim", "Mh", "Hei"];
    var namein = names[ Math.floor(Math.random() * names.length) ];
    document.getElementById("name").innerHTML = namein;
}
<button type="button" onclick="randomnamegen()">Click Me!</button>
    <p id="name"></p>

您的代码运行得很好。您必须在中通过[]更改()

var namein = names(Math.floor((Math.random() * 5) + 0));

正确的是:

var namein = names[Math.floor((Math.random() * 5) + 0)];

控制台给出以下错误:"对象不是函数"。

请查看此链接jsfiddle以查看工作示例。

希望它有用!

  • 使用方括号
  • 无需添加0

var namein = names[Math.floor(Math.random() * 5)];

或使用^ 0进行舍入

var namein = names[Math.random() * 5 ^ 0];

这是一个Fisher Yates实现,旨在打乱数组。

function shuffle(array) {
    var currentIndex = array.length,
        temporaryValue,
        randomIndex;
    while (0 !== currentIndex) {
        randomIndex = Math.floor(Math.random() * currentIndex);
        currentIndex -= 1;
        temporaryValue = array[currentIndex];
        array[currentIndex] = array[randomIndex];
        array[randomIndex] = temporaryValue;
    }
    return array;
}

打乱数组后,您可以检索如下值:

var array = [1, 2, 3, 4, 5];
function retrieve() {
    return shuffle(array)[0];
}

如果你不想让你的物品重复:

var array = [1, 2, 3, 4, 5],
    temp = [];
function retrieve() {
    if(temp.length > 0) {
        return temp.pop();
    } else {
        temp = shuffle(array.slice());
        return temp.pop();
    }
}

但不确定这是否是最佳答案。

function shuffle(array) {
    var currentIndex = array.length,
        temporaryValue,
        randomIndex;
    while (0 !== currentIndex) {
        randomIndex = Math.floor(Math.random() * currentIndex);
        currentIndex -= 1;
        temporaryValue = array[currentIndex];
        array[currentIndex] = array[randomIndex];
        array[randomIndex] = temporaryValue;
    }
    return array;
}
var array = ["Mango", "Pul", "Bat", "Tim", "Mh", "Hei"];
function retrieve() {
    document.getElementById("name").innerHTML = shuffle(array)[0];
}
<button type="button" onclick="retrieve()">Click Me!</button>
    <p id="name"></p>