检查随机数变量对Javascript数组值的匹配,不起作用

时间:2015-04-20 18:16:55

标签: javascript arrays indexof

为了学习(我非常初学者),我正在尝试编写一个函数,根据三个用户输入变量生成随机数。用户可以输入要生成的随机数

var count = 10;

避免生成哪些数字(以逗号分隔)

var doNotInclude = (document.getElementById("doNotIncludeInput").value).split(",");

可能的最高数字

var highestNumber = 10;

理论上,如果用户为doNotInclude变量输入“1,2”,则该函数应该创建一个包含这两个数字的数组,然后每次生成一个随机数时,检查数组以查看该数字它生成的是它不应生成的数字之一。

不幸的是,它不起作用。它创建了我应该通过console.log()验证的数组,但它仍然会生成它不应该生成的数字。这是完整的脚本:

document.getElementById("button").onclick = function() {
var total = 0,
    average = 0,
    random = 0,
    count = parseInt(document.getElementById("countInput").value),
    doNotInclude = document.getElementById("doNotIncludeInput").value).split(","),
    highestNumber = parseInt(document.getElementById("highestNumberInput").value);
    document.getElementById("text1").innerHTML = "";

    for (var i = 0; i < count; i++) {
        var proceed = false;
        for (random = Math.floor(((Math.random()) * (highestNumber + 1))); proceed == false;) {
            if (doNotInclude.indexOf(random)===-1) {
                proceed = true;
            }   
        }
        document.getElementById("text1").innerHTML = document.getElementById("text1").innerHTML + "<br />" + (i + 1) + ". " + random;
        total = total + random;
        if (i == (count - 1)) {
            total / count;
            document.getElementById("text").innerHTML = "Mean average = " + (Math.round(total / count));
        }
    }
}

无效的部分

if (doNotInclude.indexOf(random)===-1) {
                proceed = true;
            }

indexOf函数,是我在这里读到的,但我想我并不完全理解它。根据我的理解,它应检查是否有任何数组值与随机变量相同,如果没有,则返回“-1”并执行我的代码。但它似乎并没有这样做。我非常困惑......会喜欢一些帮助。数组是否可能将数字存储为字符串而不是整数,这就是问题?

2 个答案:

答案 0 :(得分:0)

你的if语句由于强制而无效。

===-1

数组doNotInclude包含字符串,但random是整数值,===始终比较值并键入两者。

您应该使用==。或者两种类型相同。

答案 1 :(得分:0)

Try this Fiddle

HTML

Count: <input id="countInput" value="10" /><br />
Do not include: <input id="doNotIncludeInput" value="0,1,2,3,4,5" /><br />
Highest Number: <input id="highestNumberInput" value="10" /><br />
<br />
<button type="button" id="button">Click to Run!</button><br />
<br />
Results:<br />
<div id="text1"></div>

的js

document.getElementById("button").onclick = function() {
    var currentCount = 0;
    var randomNumbers = [];
    var count = parseInt(document.getElementById("countInput").value);
    var doNotIncludeInput = document.getElementById("doNotIncludeInput").value.split(",");
    var highestNumberInput = parseInt(document.getElementById("highestNumberInput").value);
    var resultsElement = document.getElementById("text1");

    resultsElement.innerHTML = "";

    while(currentCount < count) {
        var random = -1;

        while(random === -1){
            random = Math.floor((Math.random()) * (highestNumberInput + 1));

            for(var i in doNotIncludeInput) {
                if(parseInt(doNotIncludeInput[i]) === random){
                    random = -1;
                }
            }

            if(random !== -1){
                randomNumbers.push(random);
            }
        }

        currentCount += 1;
    }

    resultsElement.innerHTML = randomNumbers.join(', ');
}