我想使用javascript随机生成0到4之间的每个数字,每个数字只能出现一次。所以我写了代码:
for(var l=0; l<5; l++) {
var randomNumber = Math.floor(Math.random()*5);
alert(randomNumber)
}
但是这段代码重复了这些值。请帮忙。
我想使用javascript随机生成0到4之间的每个数字,每个数字只能出现一次。所以我写了代码:
for(var l=0; l<5; l++) {
var randomNumber = Math.floor(Math.random()*5);
alert(randomNumber)
}
但是这段代码重复了这些值。请帮忙。
生成一系列数字:
var numbers = [1, 2, 3, 4];
然后洗牌:
function shuffle(o) {
for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
};
var random = shuffle(numbers);
另一种方法:
for (var a = [0, 1, 2, 3, 4], i = a.length; i--; ) {
var random = a.splice(Math.floor(Math.random() * (i + 1)), 1)[0];
console.log(random);
}
不知道是否有可能使它更紧凑。
测试:http: //jsfiddle.net/2m3mS/1/
这是嵌入演示:
$('button').click(function() {
$('.output').empty();
for (var a = [0, 1, 2, 3, 4], i = a.length; i--; ) {
var random = a.splice(Math.floor(Math.random() * (i + 1)), 1)[0];
$('.output').append('<span>' + random + '</span>');
}
}).click();
.output span {
display: inline-block;
background: #DDD;
padding: 5px;
margin: 5px;
width: 20px;
height: 20px;
text-align: center;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="output"></div>
<button>Run</button>
Adil 和 Minko 给出的答案有一个主要问题(尽管 Minko 至少将其限制为一小部分数字):他们一遍又一遍地检查相同的数字。
从这个意义上说,更好的方法是创建包含可能值的数组,将其打乱,然后从其中弹出元素。这将需要改组数组的复杂性,但它会摆脱上面提到的问题。
var elements = [1, 2, 3, 4];
elements.shuffle(); // not a standard Javascript function, needs to be implemented
while( elements.length > 0 ) {
console.log( elements.pop() );
}
感谢您的所有帮助。但可能另一种在给定最大范围内生成随机数的方法可以按照以下方式实现。
function generateRan(){
var max = 20;
var random = [];
for(var i = 0;i<max ; i++){
var temp = Math.floor(Math.random()*max);
if(random.indexOf(temp) == -1){
random.push(temp);
}
else
i--;
}
console.log(random)
}
generateRan();
function getRanArr(lngth) {
let arr = [];
do {
let ran = Math.floor(Math.random() * lngth);
arr = arr.indexOf(ran) > -1 ? arr : arr.concat(ran);
}while (arr.length < lngth)
return arr;
}
const res = getRanArr(5);
console.log(res);
如果随机数的范围不是很大,你可以使用这个:
var exists = [],
randomNumber,
max = 5;
for(var l = 0; l < max; l++) {
do {
randomNumber = Math.floor(Math.random() * max);
} while (exists[randomNumber]);
exists[randomNumber] = true;
alert(randomNumber)
}
生成没有任何范围的随机数
function getuid() {
function s4() {
return Math.floor((1 + Math.random()) * 0x10000)
}
return s4() + s4();
}
var uid = getuid();
alert(uid)
HTML:
<p id="array_number" style="font-size: 25px; text-align: center;"></p>
JS:
var min = 1;
var max = 90;
var stop = 6; //Number of numbers to extract
var numbers = [];
for (let i = 0; i < stop; i++) {
var n = Math.floor(Math.random() * max) + min;
var check = numbers.includes(n);
if(check === false) {
numbers.push(n);
} else {
while(check === true){
n = Math.floor(Math.random() * max) + min;
check = numbers.includes(n);
if(check === false){
numbers.push(n);
}
}
}
}
sort();
//Sort the array in ascending order
function sort() {
numbers.sort(function(a, b){return a-b});
document.getElementById("array_number").innerHTML = numbers.join(" - ");
}
使用randojs简单且加密安全:
console.log(randoSequence(4))
<script src="https://randojs.com/2.0.0.js"></script>
这么多解决方案!这是我的可重用函数的代码,它接受 3 个参数:数组中所需的整数数量(长度)和数组应包含的范围(最大值和最小值)。
function generateRandomArr(length, max, min) {
const resultsArr = [];
for (let i = 0; i < length; i++) {
const newNumber = Math.floor(Math.random() * (max - min)) + min;
resultsArr.includes(newNumber) ? length += 1 : resultsArr.push(newNumber);
}
return resultsArr;
}
generateRandomArr(10, 100, 0);
// this would give a list of 10 items ranging from 0 to 100
// for example [3, 21, 56, 12, 74, 23, 2, 89, 100, 4]
这是一个解决方案,可让您指定结果数组的长度,也可以使用负数。
// FROM: https://stackoverflow.com/a/2450976/2345158
function shuffleArr(array) {
let currentIndex = array.length;
let randomIndex;
// While there remain elements to shuffle...
while (currentIndex !== 0) {
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex--;
// And swap it with the current element.
[array[currentIndex], array[randomIndex]] = [
array[randomIndex], array[currentIndex]];
}
return array;
}
// Will generate a list of random numbers in a range without duplicates
function getRandomNumberArr(min, max, length) {
if (length > max - min + 1) throw Error('Length must not be longer than number of unique values.')
// Generate list of possible values
let optionsArr = [...Array(max - min + 1).keys()];
// Return the needed number of random elements
return shuffleArr(optionsArr).splice(0, length).map(el => el + min);
}
console.log(getRandomNumberArr(-2, 2, 5))
var randomNumber = [];
for (var i = 0; i < 16; i++) {
var number = Math.floor(Math.random() * 4);
var genNumber = randomNumber.indexOf(number);
if (genNumber === -1) {
randomNumber.push(number);
}
}