如何从数组中获取随机值?

时间:2014-10-02 16:41:13

标签: javascript

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

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>

我得到一个未捕获的TypeError:对象不是谷歌Chrome控制台中的JavaScript.js:3函数。

4 个答案:

答案 0 :(得分:1)

对阵列使用[]方括号:

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>

答案 1 :(得分:0)

您的代码运行良好。你必须在[]中用[]改变()

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

正确的是:

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

控制台发出以下错误:“对象不是函数”。

点击此链接jsfiddle查看一个有效的示例。

希望它有用!

答案 2 :(得分:0)

  • 使用方括号
  • 没有必要添加0

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

或使用^ 0进行舍入

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

答案 3 :(得分: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();
    }
}

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

&#13;
&#13;
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];
}
&#13;
<button type="button" onclick="retrieve()">Click Me!</button>
    <p id="name"></p>
&#13;
&#13;
&#13;