在Javascript中使用对象数组作为参数
Using an array of objects as an argument in Javascript
根据用户所从事的活动,我有各种元素想要显示或隐藏。以前,我的setDisplays函数有一长串参数,每次调用该函数时都需要设置:例如
setDisplays("none","inline","inline","none","none","none","block","none","none","none","none","table","block","block");
除了难以阅读和设置外,它还不够灵活。因此,我更改了函数以获取一组对象:例如
setDisplays([{bingoDisplay:"none"},{bingoScore:"none"},{bingoWords:"none"},{book_overlay:"none"},{choiceDiv:"none"},{errDiv:"none"},{imageDiv:"block"},{livesDispTop:"none"},{phonDisplay:"none"},{score:"none"},{timer:"none"},{phonUSelect:"none"},{numUSelect:"none"},{vocSelect:"table"}]);
修改后的功能是:
function setDisplays(display) {
var display_name;
var display_setting;
for (var i=0; i<display.length; i++){
display_name=Object.keys(display[i]);
display_setting=display[i][display_name];
document.getElementById(display_name).style.display=display_setting;
}
}
我已经做了一些初步的测试,它似乎有效,但我对对象还不熟悉,所以在我提交并将所有内容转移到新功能之前,有人能告诉我这个策略是否存在无法预见的问题吗?
我到处找了找,找不到这样的论点的例子。
附言:我意识到旧浏览器不支持Object.keys,但我广泛使用HTML5音频,所以无论如何都需要为它们创建一个重定向页面。
使用对象将是一个简单得多的解决方案。
var setDisplays = {
bingoDisplay: "none",
bingoScore: "none",
bingoWords: "none"
};
然后,您可以访问每个属性,读取或设置,通过:
setDisplays.bingoScore = "something";
setDisplays.bingoScore; //returns "something"
我建议使用对象作为参数,而不是数组。示例:
function setDisplays(obj) {
var display_name;
var display_setting;
for (var i in obj){
if (!obj.hasOwnProperty(i)) { continue; }
display_name=i;
display_setting=obj[i];
document.getElementById(display_name).style.display=display_setting;
}
}
setDisplays({bingoDisplay:"none", bingoScore:"none", bingoWords:"none"});
具有Object.keys
的setDisplays
函数的另一个版本
function setDisplays(obj) {
var display_name;
var display_setting;
var keys = Object.keys(obj);
for (var i=0, l=keys.length; i<l; i++){
key = keys[i];
display_name=key;
display_setting=obj[key];
document.getElementById(display_name).style.display=display_setting;
}
}
与数组表示法相比,使用对象将更直观,因为您可以直接引用键,而不是跟踪哪个参数位于哪个索引,如果性能是任务的优先事项,请查看JavaScript中Objects/Arrays的性能如何?(专门针对Google V8),但我认为性能不应该是个问题。
相关文章:
- jQuery数组参数和each()
- 将数组参数传递给XMLHttpRequest对象
- 使用数组参数构建URL
- 如何将JavaScript数组编码为与PHP兼容的“;数组参数“;在查询字符串中
- Ajax 无法使用带有 2D 数组参数的 C# 控制器操作
- 如何使用按数组参数过滤的角度访问嵌套的 JSON 数组数据
- 如何将变量名称用于数组参数
- 如何将“回调”数组参数传递给匿名函数
- JavaScript 无法从函数的数组参数中获取值
- 在Javascript函数中使用新的ES2015 rest参数而不是使用数组参数有什么优点
- Mongo:使用$in数组参数对结果进行排序
- 如何将数组参数从Code-behind传递给javascript
- 数组参数Vs直接参数传递给Javascript函数
- 数组参数解构抛出意外错误
- 如何创建一个基于数组参数的函数
- 如何在javascript中获取URL数组参数
- 如何将数组参数从url转换为javascript中的对象
- 如何从集合中通过数组参数获取模型
- 流星.调用检查数组参数
- Javascript数组参数问题