使用数百块的if else语句的有效方法
Efficient way to if else statement with hundreds of blocks
我有一个用户可以点击的数百个数字的列表,每个数字对应于一个以用户点击的相同数字结束的场景变量,即如果用户选择"43",则执行renderer.render(scene43,camera)。
//jumpSwitcher is defined the numerical value that the user has clicked on
jumpSwitcher = +value;
if (jumpSwitcher == 1) {
renderer.render(scene1, camera);
} else if (jumpSwitcher == 2) {
renderer.render(scene2, camera);
}
这可能会持续数百次。我如何写上面的代码,这样我可以节省自己很多的工作。如何有效地定义一个包含数百个场景变量的数组?
我建议使用"literal object"
var conditions = {
"1": ..., // treat condition to 1
"2": ... // treat condition to 2
"default": ... // default treatment
}
var treatment = conditions[scene] || conditions.default;
使用数组
var scenes = [ null, scene1, scene2, scene3 ];
renderer.render(scenes[jumpSwitcher], camera);
如果有连续的数字,可以使用数组
scenes = [scene0, scene1, ..., sceneN ]
// access
renderer.render(scenes[scene], camera);
或一个对象,表示有空格的数字
scenes = { 10: scene10, 15: scene15 }
// access
renderer.render(scenes[scene], camera);
或Map
scenes = new Map([[4, scene4], [20, scene20]]);
// access
renderer.render(scenes.get(scene), camera);
另一种可能是使用编程风格提早返回,这意味着,创建一个条件,并在满足条件时结束函数。
function callScene(scene) {
if (scene === 1) {
renderer.render(scene1, camera);
return;
}
if (scene === 2) {
renderer.render(scene2, camera);
return;
}
// ...
}
一种方法是使用eval(),但不要使用。
您可以使用以下命令填充一个场景数组:
scenes = Array.apply(null, Array(100)).map(function () {return new Scene();});
或者,在ES6中,
scenes = Array.from(Array(100), () => new Scene())
然后使用:
renderer.render(scenes[jumpSwitcher-1], camera);
使用switch语句,例如
switch(jumpSwitcher)
{
case 1: {renderer.render(scene1, camera); break;}
...
}
由于场景似乎是全局变量,您也可以使用:
renderer.render(window['scene' + jumpSwitcher], camera);
无eval
,单行,可变scene
数…没有比这更简单的了。
如果场景不在window
上,请替换为合适的作用域对象。(例如this
).
就这样写:
"use strict";
renderer.render(eval('scene' + jumpSwitcher), camera);
你不需要if
或switch
。
UPDATE:为eval()
, docs添加严格模式
相关文章:
- 如何在ReactJS JSX中执行嵌套的if-else语句
- Javascript Return and if/else
- JavaScript if-else 速记错误
- 如何检查if/else语句中的随机条件
- 在javascript中创建数组,而不是if.else
- Javascript If else 只返回 TRUE 或只返回 FALSE
- jquery if else不返回警报消息
- 在Javascript中为if/else语句添加OR
- If Else Java Script HTML
- jQuery/Javascript foreach If/Else |如果为空(不执行任何操作)Else(显示forea
- 我应该如何应用if-else条件来向具有不同用户角色的人显示不同的菜单
- geoTest函数-创建if/else语句
- JavaScript中的温度转换器(IF ELSE条件)
- Jquery/Javascript使用IF/ELSE语句更改img SRC
- 编写if-else语句的更好方法
- 在if/else语句中显示DIV
- PHP If Else-隐藏按钮
- JavaScript if/else未按预期操作
- if/else运算符未更改
- 名称不能以''jquery-if-else条件中的字符