Tengo una idea de cómo acelerar mi proyecto, pero me quedo estancado al comparar una variable con variables en el diccionario y luego activar la función.
Mi pregunta es, ¿es esto posible? Y si es posible, ¿cómo puedo compararlo y activar esa función?

function Ziskej() {
  var command = document.getElementById("vysledek").innerHTML;
}
for (var i = 0; i < commands.length; i++) {
  if (command === i) {
  }
}
var commands = [
  {
    command: 'hi',
    func: function () {}
  },
  {
    command: 'hello',
    func: function() {}
  }
];
0
Gasky09 14 ene. 2017 a las 18:06

3 respuestas

La mejor respuesta

Creo que estás buscando algo como esto:

function Ziskej() {
    var command = document.getElementById("vysledek").innerHTML;

    for (var i = 0; i < commands.length; i++) {
        if (commands[i].command == command) {
            commands[i].func();
        }
    }
}

var commands = [{
    command: 'hi',
    func: function() {}
}, {
    command: 'hello',
    func: function() {}
}];
0
Jeremy Jackson 14 ene. 2017 a las 15:10
 (commands.find(el=>el.command===command).func||function(){alert("not found");})();

Encuentre el elemento que tiene una propiedad de comando similar al comando, luego ejecute su función. Podrías usar un bucle for, como este:

    for (var i = 0; i < commands.length; i++) {
      if (command === commands[i].command) {
            commands[i].func();
            break;//stop for loop -> better performance
            //OR
            return; //stop function -> code after the for loop is just executed if nothin found
        }
    }
    alert("not found");//just add if you use return and not break.

Acerca de acelerar, sería mejor no encontrar, pero tener un objeto así:

 var commands={
   hi:function(){},
   ok:function(){}
};

Entonces puedes hacer:

(commands[command]||function(){alert("not found");})();

Para más explicaciones lea:

=> funciones de flecha

|| el operador OR (realmente genial en js)

0
Jonas Wilms 14 ene. 2017 a las 15:20

Haría algo como esto en ES5:

var commands = {
  hi: function() {},
  hello: function() {},
};

// command will be 'hi' or 'hello'
var command = document.getElementById("vysledek").innerHTML;

commands[command]();

En ES6:

const commandsMap = new Map();
commandsMap.set('hi', function() {});
commandsMap.set('hello', function() {});

// command will be 'hi' or 'hello'
var command = document.getElementById("vysledek").innerHTML;

commands.get(command)();

Ambos ejemplos eliminan el bucle en su función

0
pkempenaers 14 ene. 2017 a las 15:16