按条件创建数组

时间:2013-09-27 09:19:05

标签: javascript random

我想通过下一步将数字插入数组:

  1. 数字应介于1-5
  2. 之间
  3. 第一个数字不能为1,第二个数字不能为2等。
  4. 所选号码无法插入另一个索引
  5. 例如:

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

    任何帮助表示赞赏!

2 个答案:

答案 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);

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