Javascript中的动态切换

Javascript中的动态切换,javascript,switch-statement,Javascript,Switch Statement,我想在javascript中对动态内容进行切换,我将举一个例子: switch(terrain) { case "Plains": terrain = Plains.create(newPosition); break; case "Mountains": terrain = ImpassableMountain.create(newPosition); break;

我想在javascript中对动态内容进行切换,我将举一个例子:

switch(terrain) {
        case "Plains":
            terrain = Plains.create(newPosition);
            break;
        case "Mountains":
            terrain = ImpassableMountain.create(newPosition);
            break;
        case "Hills":
            terrain = Hills.create(newPosition);
            break;
        case "Forest":
            terrain = Forest.create(newPosition);
            break;
        case "River":
            terrain = River.create(newPosition);
            break;
        default:
    };
所以,如果我想添加一个新的地形,例如海洋,我希望它会自动更新。我正在考虑将所有地形排列成一个阵列

var terrainArray = ["Plains","Mountains","Hills","Forest","River","Ocean",...]
但我不知道如何以最优化的方式将其放入开关中,因为如果我尝试

for(var i=0;i<terrainArray.length;i++){
     if(terrain==terrainArray[i]){
         Terrain.create(newPosition);
     }
}

for(var i=0;i您可以简单地使用
.indexOf
检查它是否在该数组中,并相应地执行操作

terrainArray.indexOf(terrain) >=0 ? Terrain.create(newPosition) : null;


它将遍历整个数组。要在数组中找到某个对象,它将始终使用对象文字-这使它变得更容易和更快,因为您不必每次查找某个对象时都循环数组。它也比开关更容易动态处理

const foo = {
  Plains: Plains,
  Mountains: ImpassableMountains
}

let x = 'Plains';

foo[x].create(newPosition)

开关
通常也适用于所有情况。我不认为这段代码处于瓶颈位置,因为它会影响性能