比使用大量其他 if 语句更有效的方法

More efficient way than using lots of else if statements

本文关键字:语句 有效 方法 if 其他      更新时间:2023-09-26

我正在尝试在Javascript中找到更好的方法来做到这一点:

if ( text === 'amy' ) {
var url = 'http://www.mydomain.com/amylikescats.html';
}
else if ( text === 'dave' ) {
var url = 'http://www.mydomain.com/daveshome.html';
}
else if ( text === 'steve' ) {
var url = 'http://www.mydomain.com/steve2.html';
}
else if ( text === 'jake' ) {
var url = 'http://www.mydomain.com/jakeeatstofu.html';
}
else {
var url = 'http://www.mydomain.com/noone.html';
}

有没有更代码效率的方法呢?

使用对象作为映射:

var map = {
    "amy": 'http://www.mydomain.com/amylikescats.html',
    "dave": 'http://www.mydomain.com/daveshome.html',
    // etc
};
var text = "whatever";
var url = map[text] === undefined ? 'http://www.mydomain.com/noone.html' : map[text];

这将为您节省最大数量的重复代码,但如果您还需要执行其他操作,而不是设置url switch可能更合适。

Switch 语句!

var url = 'http://www.mydomain.com/noone.html';
switch(text) {
  case 'amy': url = 'http://www.mydomain.com/amylikescats.html';
  break;
  case 'dave': url = 'http://www.mydomain.com/daveshome.html';
  break;
  case 'steve': url = 'http://www.mydomain.com/steve2.html';
  break;
  case 'jake': url = 'http://www.mydomain.com/jakeeatstofu.html';
  break;
}

现在不需要 default 子句,因为您在切换之前已经初始化了url

否则,您可以添加以下内容:

default: url = 'http://www.mydomain.com/noone.html';
break;

关联数组:

var data = {
  amy: 'http://www.mydomain.com/amylikescats.html',
  dave: 'http://www.mydomain.com/daveshome.html',
  // etc... 
}

要使用:

var url = data[text];

else情况可以通过数组中不存在的项来复制,因此可以扩展一点:

var url = '';
if(!(text in data)){
    url = 'http://www.mydomain.com/daveshome.html';
}
else{
    url = data[text];
}

将唯一部分存储在字典中,然后从那里获取:

var map = {
    amy: "amylikescats",
    dave: "daveshome",
    steve: "steve2",
    jake: "jakeeatstofu"
};
var url = map[text];
if (!url) {
    url = 'http://www.mydomain.com/noone.html';
} else {
    url = 'http://www.mydomain.com/' + url + '.html';
}

可以使用对象来保存不同文本值的 URL,然后在将值分配给url时使用 || 运算符,以便在必要时使用回退值。

var urlsForText = {
      'amy': 'http://www.mydomain.com/amylikescats.html',
     'dave': 'http://www.mydomain.com/daveshome.html',
    'steve': 'http://www.mydomain.com/steve2.html',
     'jake': 'http://www.mydomain.com/jakeeatstofu.html'
};
var url = urlsForText[text] || 'http://www.mydomain.com/noone.html';