2014-11-21 4 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

ответ

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

0

Не уверен, что это будет подходящим для вашего случая, но, возможно, вы должны объявить пустой массив в начале getList как этот getListArray = [];, присвойте ему возвращаемое значение, а затем вызовите console.log('Function return : ' + getListArray);. Обратите внимание, что getListArray объявлен без var, поэтому он будет глобальным и будет перезаписан каждый раз, когда вы вызываете getList.

Смежные вопросы