2013-03-06 2 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', делая две другие глобальные. Вы должны добавить 'var' перед' arr2' и 'arr3'. – bfavaretto

ответ

1

Не совсем. Так как вы не заинтересованы в «другом» случае, вы бы лучше с этим:

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

И подобные конструкции.

Если вы это сделаете, тогда так называемая кнопка «все» вернет только «один» массив, потому что он всегда будет соответствовать первому оператору if и возвратит массив.

+0

Извините, я забыл взять «все» в редактировании. – user1740058

+0

Если вы больше не используете кнопку '' all "', вы можете удалить '|| arr == "all" 'из условий' if'. –

+0

Подожди, я слишком скоро заговорил. Если мне нужно получить их все, я буду вынужден отправлять значения в качестве параметров или запускать функцию через цикл. – user1740058

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; 
} 
Смежные вопросы