Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript函数整理_Javascript_Jquery - Fatal编程技术网

Javascript函数整理

Javascript函数整理,javascript,jquery,Javascript,Jquery,下面您将看到我当前使用的javascript/jQuery函数: var forward = new RegExp('forward'), backward = new RegExp('backward'), left = new RegExp('left'), right = new RegExp('right');

下面您将看到我当前使用的javascript/jQuery函数:

            var forward = new RegExp('forward'),
                backward = new RegExp('backward'),              
                left = new RegExp('left'),      
                right = new RegExp('right');                

            if ( tweet.message.match(forward) ) {
                console.log('forward');
                body.addClass('forward');
                bodyRemoveClass();                          
            }

            if ( tweet.message.match(backward) ) {
                console.log('backward');
                body.addClass('backward');
                bodyRemoveClass();                          
            }

            if ( tweet.message.match(left) ) {
                console.log('left');
                body.addClass('left');
                bodyRemoveClass();                          
            }

            if ( tweet.message.match(right) ) {
                console.log('right');
                body.addClass('right');
                bodyRemoveClass();                          
            }                   
一切都很好,但我对它的书写方式不是100%满意。 基本上就是检查给定的关键字(向前、向后、向左或向右)
都在tweet中(tweet.message)

我想知道是否有一个简单/更干净的方法来实现这一点

抱歉,没有在线示例


谢谢

这里没有必要将
match()
Regexp
一起使用。您可以使用
indexOf()
进行简单的字符串匹配。然后可以避免在开始时声明所有的
Regexp

        if ( tweet.message.indexOf("forward") > -1) {
            console.log('forward');
            body.addClass('forward');
            bodyRemoveClass();                          
        }

        if ( tweet.message.indexOf("backward") > -1) {
            console.log('backward');
            body.addClass('backward');
            bodyRemoveClass();                          
        }

        if ( tweet.message.indexOf("left") > -1) {
            console.log('left');
            body.addClass('left');
            bodyRemoveClass();                          
        }

        if ( tweet.message.indexOf("right") > -1) {
            console.log('right');
            body.addClass('right');
            bodyRemoveClass();                          
        }               
但是,使用一组类可以更巧妙地完成这一任务:

// Store your 4 classes in an array
var classes = ["forward","backward","left","right"];
for (var i = 0; i<classes.length; i++) {

  // Check each class appearing in the message:
  if ( tweet.message.indexOf(classes[i]) > -1) {
     console.log(classes[i]);
     body.addClass(classes[i]);
     bodyRemoveClass();                          
  }
}
//将4个类存储在一个数组中
变量类=[“向前”、“向后”、“向左”、“向右”];
对于(变量i=0;i-1){
console.log(类[i]);
body.addClass(类别[i]);
bodyRemoveClass();
}
}

此处无需将
match()
Regexp
一起使用。您可以使用
indexOf()
进行简单的字符串匹配。然后可以避免在开始时声明所有的
Regexp

        if ( tweet.message.indexOf("forward") > -1) {
            console.log('forward');
            body.addClass('forward');
            bodyRemoveClass();                          
        }

        if ( tweet.message.indexOf("backward") > -1) {
            console.log('backward');
            body.addClass('backward');
            bodyRemoveClass();                          
        }

        if ( tweet.message.indexOf("left") > -1) {
            console.log('left');
            body.addClass('left');
            bodyRemoveClass();                          
        }

        if ( tweet.message.indexOf("right") > -1) {
            console.log('right');
            body.addClass('right');
            bodyRemoveClass();                          
        }               
但是,使用一组类可以更巧妙地完成这一任务:

// Store your 4 classes in an array
var classes = ["forward","backward","left","right"];
for (var i = 0; i<classes.length; i++) {

  // Check each class appearing in the message:
  if ( tweet.message.indexOf(classes[i]) > -1) {
     console.log(classes[i]);
     body.addClass(classes[i]);
     bodyRemoveClass();                          
  }
}
//将4个类存储在一个数组中
变量类=[“向前”、“向后”、“向左”、“向右”];
对于(变量i=0;i-1){
console.log(类[i]);
body.addClass(类别[i]);
bodyRemoveClass();
}
}

您可以使用如下表驱动方法:

var tags = ["forward", "backward", "left", "right"];
for (var i = 0; i < tags.length; i++) {
    if (tweet.message.indexOf(tags[i]) != -1) {
        body.addClass(tags[i]);
        bodyRemoveClass();
    }
}
var标记=[“向前”、“向后”、“左”、“右”];
对于(var i=0;i
请记住,每当您一遍又一遍地重复相同的逻辑和相同的字符串时,您应该找到一种方法,通过迭代表来驱动您的逻辑,将代码分解为一个公共函数,或者找到一种防止您一遍又一遍地重复代码的方法。现在软件开发中流行的行话是
DRY
(不要重复)


也没有理由用正则表达式测试每个单独的匹配项。虽然它们在需要时非常方便,
.indexOf()
在需要时速度要快得多。

您可以使用如下表驱动方法:

var tags = ["forward", "backward", "left", "right"];
for (var i = 0; i < tags.length; i++) {
    if (tweet.message.indexOf(tags[i]) != -1) {
        body.addClass(tags[i]);
        bodyRemoveClass();
    }
}
var标记=[“向前”、“向后”、“左”、“右”];
对于(var i=0;i
请记住,每当您一遍又一遍地重复相同的逻辑和相同的字符串时,您应该找到一种方法,通过迭代表来驱动您的逻辑,将代码分解为一个公共函数,或者找到一种防止您一遍又一遍地重复代码的方法。现在软件开发中流行的行话是
DRY
(不要重复)


也没有理由用正则表达式测试每个单独的匹配项。虽然它们在需要时非常方便,
.indexOf()
在满足所有需要时速度要快得多。

通过捕获匹配的短语,这可以大大缩短:

var match = tweet.message.match(/forward|backward|left|right/g);
for (var i = 0; match && i < match.length; i++) {
    console.log(match[i]);
    body.addClass(match[i]);
    bodyRemoveClass();
}   
var match=tweet.message.match(/forward | backward | left | right/g);
对于(变量i=0;匹配&i

每个
if
块中唯一不同的是要匹配的短语(与要添加的类的名称相同)。这样的重复几乎总是可以(而且应该)避免的。

捕获匹配的短语可以大大缩短重复时间:

var match = tweet.message.match(/forward|backward|left|right/g);
for (var i = 0; match && i < match.length; i++) {
    console.log(match[i]);
    body.addClass(match[i]);
    bodyRemoveClass();
}   
var directions = new Array('forward', 'backward', 'left', 'right');
$(directions).each(function()
{
    var regX = new RegExp(this);
    if (tweet.message.match(regX))
    {
        console.log(this);
        body.addClass(this);
        bodyRemoveClass();
    }
});
var match=tweet.message.match(/forward | backward | left | right/g);
对于(变量i=0;匹配&i
每个
if
块中唯一不同的是要匹配的短语(与要添加的类的名称相同)。这样的重复几乎总是可以(而且应该)避免的

var directions = new Array('forward', 'backward', 'left', 'right');
$(directions).each(function()
{
    var regX = new RegExp(this);
    if (tweet.message.match(regX))
    {
        console.log(this);
        body.addClass(this);
        bodyRemoveClass();
    }
});
等等。(我看到其他评论者已经开始了,并制作了数组进行迭代…这取决于您想要的方向:-D)


等等(我看到其他评论者已经开始了,并制作了数组进行迭代…这取决于您想要的方向:-D)

您在这里尝试使用jQuery吗?我不认为
$(directions)。每个()
都可以工作,$()函数不接受普通的字符串数组。也许您的意思是
$。each(directions,fn)
。请注意,上没有任何内容表明可以将字符串数组传递给该函数。我想我并不是说它不起作用,但它肯定没有记录在案。它看起来确实像是
$。each()
,这将是一个更明智的选择。您想在这里使用jQuery吗?我不认为
$(directions)。每个()
都可以工作,$()函数不接受普通的字符串数组。也许您的意思是
$。each(directions,fn)
。请注意,上没有任何内容表明可以将字符串数组传递给该函数。我想我并不是说它不起作用,但它肯定没有记录在案。它看起来确实像是
$。each()
这将是一个更明智的选择。这将匹配正则表达式中最多一个值,而原始函数可以同时匹配所有值。@Aaron-这不是真的(你看到我的编辑了吗?)。实际上,它有相反的问题。它将循环所有匹配项,包括重复项。哎呀,我正在查看原始的
if
语句。“也许我应该偶尔刷新一下,嗯?”亚伦-嗯,我应该首先注意到这一点;那我就不需要这个了