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的不重复数字(对于公牛和奶牛的游戏)。但我不知道如何实现检查此数组的重复数字。有人请帮忙。提前致谢
答案 0 :(得分:1)
或者,您可以使用包含从0
到9
的所有数字的源数组,并且每次从源中选择并删除其中一个数字:
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;
}