2012-08-07 40 views
2

找到更好的方法來做到這一點在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'; 
} 

是否有這樣做的更多的代碼,有效的方式「?

+2

目前已經低於一些偉大的答案 - 這另一個堆棧溢出問題是相當不錯引用過和多一點的深度解釋說:http://stackoverflow.com/a/2573153/649979 – 2012-08-07 10:53:58

回答

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 a switch可能更合適。

+0

如果它只是一個將鍵值映射到值,這是最好的解決方案。 – Aesthete 2012-08-07 10:56:07

6

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; 
0

關聯數組:

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

要使用:

var url = data[text]; 

else情況下,可以複製DBY數組中的項的非所有腦幹,所以擴大了一下:

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

在JavaScript中,它們被稱爲對象。 – 2012-08-07 10:58:43

+0

@ PaulD.Waite - 學究多? [This goog search](https://www.google.co.uk/search?q=javascript+associative+array&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-GB:official&client=firefox- a)表明術語「關聯數組」通常與javascript鏈接(根據〜400K結果判斷)。 – Jamiec 2012-08-07 11:23:38

+0

確實如此,關聯數組的概念(如果我理解正確)完全適用於JavaScript對象。這不僅僅是他們在JavaScript中調用的。 – 2012-08-07 11:51:16

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

你可以使用一個對象來保存文本的不同值的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'; 
相關問題