Javascript - 将数组数组发送到函数

时间:2014-11-21 09:03:13

标签: javascript arrays function

我有一个从数组返回列表的函数。我用这些数组的数组调用该函数。

这是代码:          

<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([control,keyboard]);我有一个错误,因为浏览器不知道控件或键盘。逻辑,因为它们是函数的本地。我用'函数以字符串方式返回参数列表发送这些值。

我无法将数组定义放在全局中,因为我在许多脚本中的许多地方都调用了这个函数。

在我的例子中,我应该

['resize', 'scroll', 'zoom', 'focus', 'blur', 'select', 'change', 'submit', 'reset','keydown', 'keyup', 'keypress', 'input']

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分:0)

不确定它是否适合您的情况,但也许您应该在getList的开头声明空数组,如此getListArray = [];,为其指定返回值,然后调用{{1} }。请注意,console.log('Function return : ' + getListArray);声明时没有getListArray,因此它将是全局的,每次调用var时都会被覆盖。