2017-01-14 12 views
0

私のプロジェクトをスピードアップする方法を知っていますが、ある変数を辞書の変数と比較して機能をトリガするのに苦労します。
私の質問は、これは可能ですか?可能であれば、どのように私はそれを比較し、その機能をトリガーすることができますか?
Javascript辞書の比較

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

id = vysledekのdivにはどのような値がありますか? – devadrion

+0

音声入力により変化します。 しかし、私はすでにJeremyから正しい答えを得ます。 – Gasky09

+0

JavaScriptには辞書がありません。その言葉はどこで手に入れましたか? –

答えて

0

私はあなたがこのような何かを探していると思う:ES6で

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

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

commands[command](); 

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");})(); 

そのFUNCを実行して、要素のウィッヒは、コマンドのようなコマンドプロパティを持っていて下さい。あなたのように、forループを使用することができます

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. 

スピードアップについては、見つからない方がよいが、そのようなオブジェクトを持っているでしょう:

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

その後、あなたが行うことができます:

より多くの説明については
(commands[command]||function(){alert("not found");})(); 

を読む:

=>矢印機能を

|| OR演算子(JSで本当にクール)

+1

それは、一致する配列要素が見つからない場合、1行のバージョンがエラーになることを指摘する価値がある。 –

+0

@DavidThomas私は、エラー処理の実装が優れていたと思う;) –

0

私はES5でこのような何かをするだろう。

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

これらの例はどちらも、あなたの関数内でループを解消

関連する問題