我想通过下一步将数字插入数组:
例如:
[1,2,3,4,5]
我随机化了第一个数字:1 [条件2不存在:1不能在第一个索引中,所以我再次随机化并得到4个。)
所以新阵列:
0 - 4
1 -
2 -
3 -
4 -
我将一个数字随机化到第二个单元格并得到4,但是4被插入第一个元素[条件3],所以我再次随机化得到2,但是2不能是第二个元素[条件2],所以我再次随机,得到5。
0 - 4
1 - 5
2 -
3 -
4 -
等
我尝试用数字(1-5)初始化vec:
var array = new Array();
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
array[4] = 5;
var newarr = new Array();
function getRandomInt (min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
$(document).ready(function() {
for (var i = 0; i < 5; i++) {
var rand;
// check condition 2
while((rand = getRandomInt(1, 5)) == (i+1));
newarr[i] = rand;
//array.splice(i, 1);
}
// print the new array
for (var i = 0; i < 5; i++) {
alert((i+1) + '->' + newarr[i]);
}
});
但我需要在我的代码中添加条件3,
任何帮助表示赞赏!
答案 0 :(得分:1)
试试这个:
$(document).ready(function() {
for (var i = 0; i < 5; i++) {
var rand;
// check condition 2
while((rand = getRandomInt(1, 5)) == (i+1) || $.inArray(rand, newarr)) // Also check, if generated number is already in the array
newarr[i] = rand;
//array.splice(i, 1);
}
// print the new array
for (var i = 0; i < 5; i++) {
alert((i+1) + '->' + newarr[i]);
}
});
但要注意。如果你生成例如这个数组:
[2, 1, 4, 3]
你最终会有一个无休止的while循环,因为唯一可用的数字是5,但它不能插入那个位置。
答案 1 :(得分:1)
var values = [1,2,3,4,5];
var output = [];
for(var i=0;i<5;i++)
{
do{
var index = Math.floor(Math.random() * values.length);
}while(values[index] == i +1);
output[i] = values[index];
values.splice(index, 1);
}
console.log(output);