Javascript函数整理
下面您将看到我当前使用的javascript/jQuery函数:Javascript函数整理,javascript,jquery,Javascript,Jquery,下面您将看到我当前使用的javascript/jQuery函数: var forward = new RegExp('forward'), backward = new RegExp('backward'), left = new RegExp('left'), right = new RegExp('right');
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
语句。“也许我应该偶尔刷新一下,嗯?”亚伦-嗯,我应该首先注意到这一点;那我就不需要这个了