Javascript jQuery-如果array.filter失败,是否显示消息?

Javascript jQuery-如果array.filter失败,是否显示消息?,javascript,jquery,arrays,array-filter,Javascript,Jquery,Arrays,Array Filter,我正在制作一个jQuery控制台,我正在使用一个填充了可用命令的数组来验证用户的输入——例如,如果他们输入help,如果help在array.name中,则继续下一位代码 问题是当过滤器完全失败时,我想显示一条消息,如帮助根本不在数组中,如“该命令不存在”。以下是我目前的代码: var commands = [ { 'name': 'help', 'desc': 'display information about all available commands or

我正在制作一个jQuery控制台,我正在使用一个填充了可用命令的数组来验证用户的输入——例如,如果他们输入
help
,如果
help
array.name
中,则继续下一位代码

问题是当
过滤器
完全失败时,我想显示一条消息,如
帮助
根本不在数组中,如“该命令不存在”。以下是我目前的代码:

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
        }
    }
}
var命令=[
{'name':'help',
“desc”:“显示有关所有可用命令或单个命令的信息”,
“args”:“命令名”},
{'name':'info',
“desc”:“显示有关此控制台及其用途的信息”},
{'name':'authinfo',
'desc':'display information on me,the creator'},
{'name':'clear',
'desc':'清除控制台'},
{'name':'opensite',
'desc':'打开网站',
'args':'url'},
{'name':'calc',
'描述':'计算数学方程',
“args”:“数学方程”},
{'name':'instr',
'desc':'控制台使用说明'}
];
函数detect(cmd){//函数获取页面上的
var cmd=cmd.toLowerCase();//以防他们用大写字母键入命令(我很懒)
commands.filter(函数(命令){
if(command.name==cmd){
开关(cmd){
//做事
}
}
否则{
警报(“未找到该命令”);//每次command.name!=cmd时都会触发此命令
}
}
}
如果需要的话,我有一个包含(几乎)所有代码的JSFIDLE

每次找不到命令名时,else语句都会激发——这是一个很大的数目,因为它在数组中循环

使用
过滤器时,如果在数组中的任何位置都找不到命令名,是否有方法显示消息

提前感谢,如果我没有理解,请道歉,并为代码墙道歉,我愿意接受其他方法的建议

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???");
});
别紧张

而非开关是尝试过滤方法功能:

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

放轻松。

如果找不到,可以使用布尔值来标记它吗?因此,在else语句中,而不是像“notFound=true;”这样放置警报,然后在循环完成时,只需检查是否(notFound){//do stuff}因此,您的错误只触发一次。@zgood谢谢您的建议。我会立即尝试并返回给您。@zgood无论是否找到值,数组仍然循环到最后。我使用了“return”试图停止循环,但无效。是否可以使用布尔值来标记未找到该循环?因此,在else语句中,而不是像“notFound=true;”这样放置警报,然后在循环完成时只检查(notFound){//do stuff}因此,您的错误只触发一次。@zgood谢谢您的建议。我会立即尝试并返回给您。@zgood无论是否找到值,数组仍然循环到最后。我使用了“return”试图停止循环,但无效。谢谢!效果很好!我无法破译它,但效果很好。我只是检查get_command()['name']是否返回未定义的?使用命令。筛选(命令,成功回调,失败回调)好吗?谢谢!效果很好!我无法破译,但效果很好。我只是检查get_command()['name']返回未定义的?使用命令。筛选器(命令、成功回调、失败回调)确定吗?