2017-01-14 3 views
0

Ich habe eine Idee, wie man mein Projekt beschleunigen kann, aber ich bleibe stecken im Vergleich einer Variablen mit Variablen im Wörterbuch und dann auslösende Funktion.
Meine Frage ist, ist das möglich? Und wenn es möglich ist, wie kann ich es vergleichen und diese Funktion auslösen?
Javascript-Wörterbuch vergleichen

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

Welchen Wert haben Sie im div mit id = vysledek? – devadrion

+0

ändert sich mit der Spracheingabe. Aber ich habe schon richtige Antwort von Jeremy – Gasky09

+0

JavaScript hat keine Wörterbücher. Wo hast du diesen Begriff? –

Antwort

0

Ich glaube, Sie suchen etwas wie folgt aus:

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
(commands.find(el=>el.command===command).func||function(){alert("not found");})(); 

das Element Wich Finden hat einen Befehl Eigenschaft ähnlich wie Befehl, dann seine func auszuführen. Sie könnten eine for-Schleife wie folgt verwenden:

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. 

Über die Beschleunigung, wäre es besser, nicht zu finden, haben aber ein solches Objekt:

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

dann können Sie tun:

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

weitere Erklärungen lesen:

=> Pfeil Funktionen

|| der OR-Operator (wirklich cool in js)

+1

Es ist erwähnenswert, dass die einzeilige Version zu einem Fehler führt, wenn kein übereinstimmendes Array-Element gefunden wird. –

+0

@DavidThomas Ich denke, die Implementierung von Fehlerbehandlung war besser;) –

0

ich so etwas wie dies in ES5 tun würde:

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

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

commands[command](); 

In 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)(); 

Beide Beispiele beseitigen die Schleife in Ihrer Funktion