生成一个包含未重复数字的4位数组

时间:2014-07-13 12:04:07

标签: javascript arrays

var globalScope = {}


function generateNum() {
    globalScope.genNum = [];
    for (var i = 0; i < 4; i++) {
        var numEl = Math.floor((Math.random() * 9)+1);
        globalScope.genNum.push(numEl);
    }
    return globalScope.genNum;
}

大家好。我刚刚开始研究JS而我的硬件是创建一个4位数组,其中包含从1到9的不重复数字(对于公牛和奶牛的游戏)。但我不知道如何实现检查此数组的重复数字。有人请帮忙。提前致谢

5 个答案:

答案 0 :(得分:1)

或者,您可以使用包含从09的所有数字的源数组,并且每次从源中选择并删除其中一个数字:

function genNum(){
    var arr = [], // target array
        source = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], // source array
        sourceLen = source.length,
        i, r;

    for (i=0; i<4; i++) {
        r = Math.floor(Math.random()*(sourceLen-i)); // pick a random index
        // remove it from the source and add it to the target
        arr.push(source.splice(r, 1)[0]);
    }

    // return it
    return arr;
}

详细了解MDN上的.splice方法。

答案 1 :(得分:0)

最好的方法是拥有一个所有数字的数组,并从中提取数字:

var allDigits = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
    result = [];
for (var i = 0; i < 4; i++) {
    result[i] = allDigits.splice(Math.floor((Math.random() * allDigits.length) + 1, 1);
}
return result;

答案 2 :(得分:0)

好的,从初学者的角度来看,你要做的第一件事就是思考你需要采取哪些步骤来做这件事。

<强> Psedocode

1, Generate random number.
2, Place random number in array.
3, Loop until array length = 4:
4,    Generate random number.
5,    Check if number is in array already.
6,    If number isn't in array already then add it.

这使得创建代码变得非常简单,您希望生成随机数,然后将其推送到数组中。然后使用while循环直到array.length === 4。在此循环中生成更多数字,然后使用for loop检查数字中是否已存在数字,

for(var i = 0; i < array.length; i++){
   //Check here
}

答案 3 :(得分:0)

var globalScope = {}


function generateNum() {
    globalScope.genNum = [];
    while (globalScope.genNum.length < 4) {
        var numEl = Math.floor((Math.random() * 9) + 1);
        if (globalScope.genNum.indexOf(numEl) < 0) {
            globalScope.genNum.push(numEl);
        }
    }
    return globalScope.genNum;  
}

答案 4 :(得分:0)

这个功能基本上就是你想要的(我猜):

  • 首先,在index
  • 范围内选择随机[0,10-i)
  • 然后,将条目#index处的数字添加到输出数组
  • 最后,将条目#i的数字复制到条目#index

function generateNum()
{
    var digits = [0,1,2,3,4,5,6,7,8,9];
    var output = [];
    for (var i=0; i<4; i++)
    {
        var index = Math.floor(Math.random()*(10-i));
        output += digits[index];
        digits[index] = digits[10-i];
    }
    return output;
}