Javascript - 向函数发送数组数组

Javascript - Send an array of arrays to a function

本文关键字:数组 函数 Javascript      更新时间:2023-09-26

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

这是代码:

<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']
您可以使用将

名称映射到列表的对象来实现目标。在下面的代码中,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/

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