2013-03-05 90 views
0

我可以將所有的局部變量推送到一個數組中,並將其從ArrValues傳遞到doit1我試圖找到一種方法來調用並只收集我想要的數組。發送參數作爲數組

a="doit1"; 

arr="all"; 
ArrValues(a,arr); 

function ArrValues(a,arr){ 

    var func=a; 
    var num=arr; 
    var ID = num=='one' || num=='all' ? ['ID1','ID2','ID3','ID4'] : []; 
    var Nam = num=='two' || num=='all' ? ['dog','bike','horn','goat'] : []; 
    var X = num=='three' || num=='all' ? ['696','258','601','204'] : []; 
    var Y = num=='four' || num=='all' ? ['119','590','594','125'] : []; 
    window[func](ID,Nam,X,Y); 
} 
function doit1(ID,Nam,X,Y){ 
alert(ID); 
alert(Nam); 
alert(X); 
alert(Y); 
} 
+1

單個數組並保留其名稱?什麼名字? – Joseph 2013-03-05 04:27:18

+0

不要介意名字部分 – user1740058 2013-03-05 04:30:50

回答

0

試試這個:

var dict = { 'ID' : ID, 'Nam' : Nam, 'X' : X, 'Y' : Y }; 

,並傳遞一個給你的函數。 (doIt(dict);window[func](dict);


然後,您可以輕鬆地訪問任何對象變量是這樣的:

function doIt(d) 
{ 
    alert(d.ID); 
    alert(d.Nam); 
    alert(d.X); 
    alert(d.Y); 
} 
0

不是傳遞數組,而是傳遞一個對象。

{ 
    ID: num=='one' || num=='all' ? ['ID1','ID2','ID3','ID4'] : [], 
    Nam: num=='two' || num=='all' ? ['dog','bike','horn','goat'] : [], 
    X: num=='three' || num=='all' ? ['696','258','601','204'] : [], 
    Y: num=='four' || num=='all' ? ['119','590','594','125'] : [], 
} 
+0

使用對象與全局數組的區別是什麼?我試圖維持本地範圍。我需要它也儘可能快地執行。 – user1740058 2013-03-05 04:36:17

+0

全局數組不是更快!數組是一種特殊類型的對象,但訪問全局/局部範圍內的數組,對象和變量的成員基本上都是相同的東西。您可以通過更改聲明對象的位置來更改其範圍。 – Jodes 2013-03-05 07:43:34

0

您可以在一個對象的東西的一切,並傳遞到下一個該對象功能。從下一個函數中,您可以通過該對象訪問值。

function ArrValues(func, num) { 

    var obj = {} 
    , all = (num === 'all') 
    ; 

    obj.ID = (all || num === 'one') ? ['ID1', 'ID2', 'ID3', 'ID4'] : []; 
    obj.Nam = (all || num === 'two') ? ['dog', 'bike', 'horn', 'goat'] : []; 
    obj.X = (all || num === 'three') ? ['696', '258', '601', '204'] : []; 
    obj.Y = (all || num === 'four') ? ['119', '590', '594', '125'] : []; 

    window[func](obj); 
} 

function doit1(obj) { 
    alert(obj.ID); 
    alert(obj.Nam); 
    alert(obj.X); 
    alert(obj.Y); 
} 

a = "doit1"; 
arr = "all"; 
ArrValues(a, arr);