1

私はjQueryコンソールを作成しており、ユーザーの入力を検証するために使用可能なコマンドで満たされた配列を使用しています。たとえば、ユーザーが、を入力helpした場合helparray.name、次のコードに進みます。

問題は、配列にまったく含まれていないためfilter、完全に失敗したときに「そのコマンドは存在しません」などのメッセージを表示したいということです。helpこれまでの私のコードは次のとおりです。

var commands = [
    {   'name': 'help',
        'desc': 'display information about all available commands or a singular command',
        'args': 'command-name' },
    {   'name': 'info',
        'desc': 'display information about this console and its purpose' },
    {   'name': 'authinfo',
        'desc': 'display information about me, the creator' },
    {   'name': 'clear',
        'desc': 'clear the console' },
    {   'name': 'opensite',
        'desc': 'open a website',
        'args': 'url' },
    {   'name': 'calc',
        'desc': 'calculate math equations',
        'args': 'math-equation' },
    {   'name': 'instr',
        'desc': 'instructions for using the console' }
];

function detect(cmd) { // function takes the value of an <input> on the page
    var cmd = cmd.toLowerCase(); // just in case they typed the command in caps (I'm lazy)

    commands.filter(function(command) {
        if(command.name == cmd) {
            switch(cmd) {
                // do stuff
            }
        }
        else {
            alert("That command was not found."); // this fires every time command.name != cmd
        }
    }
}

必要に応じて、(ほぼ)すべてのコードを含むjsFiddleがあります。

http://jsfiddle.net/abluescarab/dga9D/

elseステートメントは、コマンド名が見つからないたびに起動します。これは、配列をループしているため、多くの場合に発生します。

使用中にコマンド名が配列のどこにも見つからない場合にメッセージを表示する方法はありますfilterか?

事前に感謝します。意味がわからなかった場合はお詫びし、コードの壁をお詫びします。これを行うための代替方法の提案を受け付けています。

4

1 に答える 1

1
function get_command(command_name) {

    var results = {};
    for (var key in commands) (function(name, desc, command) {

        if (name == command_name) (function() {

            results = command;
        }());

    }(commands[key]["name"], commands[key]["desc"], commands[key]));

    return (results);
};

get_command("help");

スイッチではなく、フィルターメソッド関数を試してください:

commands.filter = (function(command, success_callback, fail_callback) {

    if (get_command(command)["name"]) (function() {

       success_callback();
    }());

    else (function() {


        fail_callback();
    }());
});


commands.filter("help", function() {

    console.log("enter help command source :)");
}, function() {

    console.log("hey help command???");
});

落ち着いて。

于 2012-09-17T13:33:14.880 に答える