Динамический Переключатель в Javascript - PullRequest
0 голосов
/ 03 июня 2018

Я хочу сделать переключение с динамическим контентом в 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:
    };

Так что, если я хочу добавить новый Terrain, например, Ocean, я хочу, чтобы он обновлялся автоматически,Я подумываю о том, чтобы поместить все ландшафты в массив

var terrainArray = ["Plains","Mountains","Hills","Forest","River","Ocean",...]

Но я не знаю, как наиболее оптимальным образом это сделать, потому что, если я попытаюсь

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

Он не будет оптимизирован, потому что он будет проходить через весь массив.

Также мне нужно поместить класс динамически, поэтому, если эта местность - равнины, мне нужно поместить Plains.create вместо других, может быть, можноЯ делаю это с массивом классов?

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

Используйте литерал объекта - это делает его намного проще и быстрее, так как вам не нужно зацикливать массив каждый раз, когда вы что-то ищите.С динамической обработкой также легче, чем с переключателем

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

let x = 'Plains';

foo[x].create(newPosition)
0 голосов
/ 03 июня 2018

Вы можете просто использовать .indexOf, чтобы проверить, находится ли он в этом массиве, и выполнить соответствующие действия.

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

To

он пройдет через весь массив. , чтобы найти что-то в массиве это будет .. всегда

...