2013-03-06 47 views
0

早些時候,我發佈了一個關於訪問存儲在函數中的數組值的問題,
passing array value using closure,並被告知此代碼可以完成這項工作。JavaScript陣列和閉包

<script> 
    function ArrValues(arr) { 
    var arr1 = arr=='one' || arr=='all' ? ['grapes','peaches','plums'] : [], 
    arr2 = arr=='two' || arr=='all' ? ['car','motorcycle','tree'] : [], 
    arr3 = arr=='three' || arr=='all' ? ['200','1000','350'] : []; 
    gotIt(arr1,arr2,arr3); 
    } 

function gotIt(arr1,arr2,arr3){ 
    alert(arr1); 
    alert(arr2); 
    alert(arr3); 
    } 
</script> 

我更新了代碼,如下所示。這將是一個很好的方法,只返回我想要的數組,而不將它作爲參數發送給另一個函數?

<script> 
    function ArrValues(arr) { 
    var arr1 = arr=='one' || arr=='all' ? ['grapes','peaches','plums'] : []; 
    if(arr1.length>0){ 
    return arr1; 
    }; 

    arr2 = arr=='two' || arr=='all' ? ['car','motorcycle','tree'] : []; 
    if(arr2.length>0){ 
    return arr2; 
    }; 

arr3 = arr=='three' || arr=='all' ? ['200','1000','350'] : []; 
    if(arr3.length>0){ 
    return arr3; 
    } 
    } 
</script> 

<div id="one" onclick="ArrValues(this.id)">one</div> 
<div id="two" onclick="ArrValues(this.id)">two</div> 
<div id="three"onclick="ArrValues(this.id)">three</div> 
<div id="all"onclick="ArrValues(this.id)">all</div> 
+0

與問題無關,但重要的是:在他們建議的代碼中,每個變量都是在本地聲明的,但是在新版本中,您只聲明'arr1',使其他兩個全局變量。你應該在'arr2'和'arr3'之前加'var'。 – bfavaretto 2013-03-06 03:03:50

回答

1

不是真的。由於您對「其他」案件不感興趣,因此您最好使用以下方法:

if(arr == "one" || arr == "all") return ['grapes','peaches','plums']; 

以及類似的結構。這就是說,如果你這樣做,那麼所謂的「全部」按鈕將只返回「一個」數組,因爲它總是匹配第一個if語句並返回數組。

+0

抱歉,我忘記了編輯中的「全部」。 – user1740058 2013-03-06 03:04:58

+0

如果您不再使用「all」按鈕,則可以刪除「||」。 arr ==來自'if'條件的「all」'。 – 2013-03-06 03:06:09

+0

等一下,我說得太快了。如果我確實需要獲取它們,我會被迫發送值作爲參數,或者通過循環運行該函數。 – user1740058 2013-03-06 03:13:05

2

如何

function ArrValues(arr) { 
    var values = { 
     'one': ['grapes','peaches','plums'], 
     'two': ['car','motorcycle','tree'], 
     'three': ['200','1000','350'] 
     }; 

    return values[arr]; 
} 

它不處理的情況下,all你沒有描述如何在這種情況下返回..)如果與all你希望所有


值合併成單個陣列然後

function ArrValues(arr) { 
    var match, 
     values = { 
      'one': ['grapes','peaches','plums'], 
      'two': ['car','motorcycle','tree'], 
      'three': ['200','1000','350'] 
     }; 

    if (arr!=='all'){ 
     match = values[arr]; 
    } else { 
     match = values['one'].concat(values['two']).concat(values['three']); 
    } 

    return match; 
}