2014-11-21 70 views
-1

我有一個函數,它返回數組中的一個列表。我用這些數組的數組調用函數。Javascript - 發送一個數組數組到一個函數

下面是代碼:

<body> 

<script src="https://code.jquery.com/jquery-1.11.1.min.js"></script> 
<script> 



    jQuery(document).ready(function($) { 


     function getList(liste) { 
      var control = ['resize', 'scroll', 'zoom', 'focus', 'blur', 'select', 'change', 'submit', 'reset'], 
        keyboard= ['keydown', 'keyup', 'keypress', 'input'], 
        mouse = ['click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mousemove', 'mouseout', 'mousewheel', 'wheel'], 
        all = control.concat(keyboard, mouse); 


      console.log(liste); 

      tab = []; 

      for (var i=0; i < liste.length; i++) { 
        tab = tab.concat(liste[i]); 

      } 
      console.log('Array : ' + tab); 

      return tab; 
     } // End getList() 

    console.log('Function return : ' + getList(['control', 'keyboard'])); 

    }); 



</script> 
</body> 
</html> 

如果我做的GetList([控制,鍵盤]);我有一個錯誤,因爲瀏覽器不知道控制或鍵盤。邏輯,因爲它們是本地的功能。我發送這些值與一個'該函數以字符串方式返回參數列表。

我不能把數組定義放在全局中,因爲我在許多腳本的許多地方調用了這個函數。

在我的例子,我應該有

['resize', 'scroll', 'zoom', 'focus', 'blur', 'select', 'change', 'submit', 'reset','keydown', 'keyup', 'keypress', 'input'] 
+3

你的問題是什麼? – axelduch 2014-11-21 09:05:02

回答

2

你可以用一個名稱映射到列表中的對象來實現自己的目標。在下面的代碼中,lists就是這樣一個對象。您可以編寫lists['control']lists.control以獲取對應於名稱'control'的列表。

function getList(names) { 
    var lists = { 
     control: ['resize', 'scroll', 'zoom', 'focus', 'blur', 'select', 'change', 'submit', 'reset'], 
     keyboard: ['keydown', 'keyup', 'keypress', 'input'], 
     mouse: ['click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mousemove', 'mouseout', 'mousewheel', 'wheel'] 
    }; 

    var result = []; 
    for (var i = 0; i < names.length; i++) { 
     result = result.concat(lists[names[i]]); 
    } 
    return result; 
} 

要使用此功能,請確保你寫getList(['control', 'keyboard'])與周圍的列表名稱單引號。

寫一個更好的方法是使用關鍵字arguments。這使您可以將任意數量的名稱傳遞給函數而不是名稱列表。像這樣:

function getList() { 
    var lists = { 
     control: ['resize', 'scroll', 'zoom', 'focus', 'blur', 'select', 'change', 'submit', 'reset'], 
     keyboard: ['keydown', 'keyup', 'keypress', 'input'], 
     mouse: ['click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mousemove', 'mouseout', 'mousewheel', 'wheel'] 
    }; 

    var result = []; 
    for (var i = 0; i < arguments.length; i++) { 
     result = result.concat(lists[arguments[i]]); 
    } 
    return result; 
} 

alert(getList('control', 'keyboard').join(', ')); 

你可以看到這個上運行的jsfiddle:http://jsfiddle.net/tro6dmb2/

+0

偉大的對象的使用是一個不錯的方法 – Lolo 2014-11-21 09:20:55

0

不知道,這將是適合你的情況,但也許你應該在getList開頭聲明空數組這樣getListArray = [];,分配返回值,然後致電console.log('Function return : ' + getListArray);。請注意,getListArray被聲明爲不帶var,因此它將是全局的,每次您撥打getList時將被覆蓋。

相關問題