2014-03-24 37 views
3

創建一個小應用程序來生成隨機數。看到小提琴here循環中的數組

生成數字的函數有問題。有3個變量控制輸出。集合/序列中的數字的數量,集合的數量和限制生成的數字的最大數量的最大數量。

我創建了2個循環來生成組中的數字。內部循環創建一組數字(一個數組),外部循環將設置爲setArr,另一個數組。

所以我創建了2個數組。一個將持有當前生成的集合temp,以及將持有整套集合的那個,setsArr

內循環創建一個集合,外循環將創建的集合推到setsArr。在再次執行之前,我清空temp陣列。所以這一直持續下去。

但這不起作用。我肯定錯過了什麼。任何幫助?

function gen() { 
    var cols = document.getElementById("cols").value; 
    var sets = document.getElementById("sets").value; 
    var max = document.getElementById("max").value; 

    var setsArr = []; 
    var temp = []; 

    for (var i = 0; i < sets; i++) { 
     for (var j = 0; j < cols; j++) { 
      var num = Math.floor(Math.random() * max); 
      temp.push(num); 
     } 
     setsArr.push(temp); 
     temp.length = 0; 
    } 

    console.log(setsArr); 
} 
+0

什麼不行呢?一目瞭然,temp看起來應該在外循環中聲明,而不是在兩個循環之外。 –

回答

2

當你推temp陣列setsArr,它是不可複製的,但引用。清空它將清空setsArr中的數組。也總是推同一陣列時,你會得到setsArr[0] == setsArr[1] ...

相反,在每個迭代上創建一個新的數組對象:

var setsArr = []; 

for (var i = 0; i < sets; i++) { 
    var temp = []; 
    for (var j = 0; j < cols; j++) { 
     var num = Math.floor(Math.random() * max); 
     temp.push(num); 
    } 
    setsArr.push(temp); 
} 
1

jsFiddle Demo

設置數組的長度爲0影響放入父數組的每個數組。相反,在那裏使用一個局部變量,並且它會創建一個新的實例以供每次使用。這將適當地允許獨特的數組。

var setsArr = []; 

for (var i = 0; i < sets; i++) { 
    var temp = [];//local array instantiated 
    for (var j = 0; j < cols; j++) { 
     var num = Math.floor(Math.random() * max); 
     temp.push(num); 
    } 
    setsArr.push(temp);//save unique array 
} 
0

問題是這樣的線:

temp.length = 0; 

陣列的長度設置爲0劃出它的內容。這就是爲什麼你的數組是空的。

+0

他說*他希望*「清空臨時陣列*」。他爲什麼不應該? – Bergi

+0

他想要的是將'temp'設置爲一個新的空數組('temp = []'),而不是將數組清空,然後將''push''放入'setsArr'中,這是代碼當前正在執行的操作。 – mbcrute

0

DEMO

使用局部變量,然後刪除局部變量,不要等到垃圾收集器。

for (var i = 0; i < sets; i++) { 
    var temp = []; 
    for (var j = 0; j < cols; j++) { 
     var num = Math.floor(Math.random() * max); 
     temp.push(num); 
    } 
    setsArr.push(temp); 
    delete temp; 
} 
0
var generate = document.getElementById("generate"); 
generate.onclick = gen; 

function gen() { 
var cols = document.getElementById("cols").value; 

var sets = document.getElementById("sets").value; 
var max = document.getElementById("max").value; 

var setsArr = new Array(); 

for (var i = 0; i < sets; i++) { 
    setsArr[i] = new Array(); 
    for (var j = 0; j < cols; j++) { 
     var num = Math.floor(Math.random() * max); 
     setsArr[i][j]=num; 
    } 
} 
console.log(setsArr); 
} 

現在,它的做工精細我更新了提琴