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

时间:2012-08-07 10:49:26

标签: javascript if-statement

我正在尝试在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';
}

是否有更有效的方法来执行此操作?'

5 个答案:

答案 0 :(得分:13)

将对象用作地图:

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可能更合适。

答案 1 :(得分:6)

切换声明!

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;

答案 2 :(得分:0)

关联数组:

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];
}

答案 3 :(得分:0)

将独特的部分存储在字典中,然后从那里取出:

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';
}

答案 4 :(得分:0)

您可以使用对象来保存不同文本值的网址,然后在为||分配值时使用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';