我有一个从数组返回列表的函数。我用这些数组的数组调用该函数。
这是代码:
<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']
答案 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
时都会被覆盖。