2014-01-16 46 views
0

這是一個javascript代碼。我收集了10個函數card11()card25()。在另一個HTML代碼上點擊一次,我想要一個這些函數被隨機調用。我應用了以下邏輯,但似乎有缺陷。請幫助!Javascript-隨機化一組函數

arr=[card11(), card12(), card13(), card14(), card15(), card21(), card22(), card23() , card24(), card25()]; 
    function myFunc(arr) 
    { 
     var d, c, b = arr.length; 
     while (b) 
     { 
      c = Math.floor(Math.random() * b); 
      d = arr[--b]; 
      arr[b] = arr[c]; 
      arr[c] = d; 
     } 
      return arr; 
    } 
+2

我可能是錯的,但這些似乎是同樣的功能的變化。你有沒有考慮用一個參數而不是現在的10來製作一個更通用的函數? – Tibos

+0

嗯,我不知道我該怎麼做。這些功能非常複雜。 –

+0

如果您認爲問題足夠有趣,也許您可​​以在[CodeReview](http://codereview.stackexchange.com/)上發帖。確保代碼正在工作! – Tibos

回答

2

首先,數組應該包含,而不是執行函數的函數引用:

var arr=[card11, card12, card13, card14, card15, card21, card22, card23 , card24, card25]; 

接下來,你可以很容易地調用隨機函數,使用此函數數組:

function callRandom(arr){ 
    arr[Math.floor(Math.random() * arr.length)](); 
} 

示例用法

function func1(){ 
    alert("func2"); 
} 
function func2(){ 
    alert("func1"); 
} 
function func3(){ 
    alert("func1"); 
} 

var arr = [func1, func2, func3]; 


function callRandom(arr){ 
    arr[Math.floor(Math.random() * arr.length)](); 
} 

callRandom(arr); 

JS小提琴:http://jsfiddle.net/cqLLV/1/

+0

​​ 這是在HTML中調用它的正確方法嗎?我不知道要傳遞什麼參數,因爲我正在腳本文件中定義數組。 –

+0

@ user3193046您應該使用'addEventListener'附加事件,而不是內聯處理程序。 –

+0

不,我明白了!我只是在函數內部聲明瞭數組,並沒有傳遞任何參數。它的工作現在很好。謝謝! –