2013-03-06 50 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; 
}