1

我想通过以下方式将数字插入数组:

  1. 数字应该在 1-5 之间
  2. 第一个数字不能是 1,第二个不能是 2,等等。
  3. 选择的数字不能插入另一个索引

例如:

[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 - 

ETC

我试图用数字(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,

任何帮助表示赞赏!

4

2 回答 2

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]

由于唯一可用的数字是 5,因此您最终会遇到一个无休止的 while 循环,但不能将其插入该位置。

于 2013-09-27T09:25:12.560 回答
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);

演示:http: //jsfiddle.net/aJ8sH/

于 2013-09-27T09:30:49.723 回答