2013-09-27 46 views
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 - 

我試圖通過數字來初始化一個VEC(1-5):

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添加到我的代碼,

任何幫助表示讚賞!

回答

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,但它不能在那個位置插入。

+0

非常感謝你! :] –

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/