2013-08-06 127 views
0

我有一個if語句看起來像這樣:如何檢查多個值和if語句中匹配的值?

if ("Bolagsmän" in nicerows){ 
     var contact = this.makeContact(nicerows['Bolagsmän'],true); 
    } 
    else if ("Komplementär(er)" in nicerows){ 
     var contact = this.makeContact(nicerows['Komplementär(er)'],true); 
    } 
    else if("Innehavare" in nicerows){ 
     var contact = this.makeContact(nicerows['Innehavare'],false); 
    } 
    else if("Styrelseledamot, verkställande direktör" in nicerows){ 
     var contact = this.makeContact(nicerows['Styrelseledamot, verkställande direktör'], true); 
    } 
    else if("Styrelseledamöter" in nicerows){ 
     var contact = this.makeContact(nicerows['Styrelseledamöter'], true); 
    } 

正如你可以看到它是很多代碼乘法的,只是因爲有幾個可能的變量。有沒有更乾淨的方法來做到這一點?

+0

您是否期望只有其中一個發生?然後你可以在'nicerows'上使用for-in循環。 – Bergi

+0

是的,只有其中一個。 – Himmators

+0

請參閱http://stackoverflow.com/questions/3982721/javascript-getting-a-single-property-name然後 – Bergi

回答

6

你可以使用一個循環,無論是現代化的一個:

var names = ["Bolagsmän", "Komplementär(er)", "Innehavare", "Styrelseledamot, verkställande direktör", "Styrelseledamöter"]; 
var contact; 
names.some(function(name) 
{ 
    if (name in nicerows) 
    { 
     contact = this.makeContact(nicerows[name], name !== 'Innehavare'); 
     return true; // Breaks the loop 
    } 
}); 

或者無聊的老種:

var names = ["Bolagsmän", "Komplementär(er)", "Innehavare", "Styrelseledamot, verkställande direktör", "Styrelseledamöter"]; 
var contact; 
var index, name; 
for (index = 0; index < names.length; ++index) 
{ 
    name = names[index]; 
    if (name in nicerows) 
    { 
     contact = this.makeContact(nicerows[name], name !== 'Innehavare'); 
     break; 
    } 
} 

或者可能把標誌的地圖:

var names = { 
    "Bolagsmän":        true, 
    "Komplementär(er)":      true, 
    "Innehavare":        false, 
    "Styrelseledamot, verkställande direktör": true, 
    "Styrelseledamöter":      true 
}; 
var name; 
var contact; 
for (name in names) 
{ 
    if (name in nicerows) 
    { 
     contact = this.makeContact(nicerows[name], names[name]); 
     // Note use of flag -----------------------^ 
     break; 
    } 
} 
+0

你爲什麼在這裏使用'.some'?你沒有使用返回值。 –

+0

@BenjaminGruenbaum:所以我可以停止循環。瘋狂地說,'forEach'不能提供這樣做的方法。 –

+0

知道了,我不知道'.some'對互動順序有一個保證,+1對於教給我一些東西。如果只有我們有很好的ES6支持:)'var name = names.find(name => name in nicerows); contact = this.makeContact(nicerows [name],name!==「Innehavare」);' –

0

這樣的事情呢?

var words = {"Bolagsmän": true, "Komplementär(er)": true, "Innehavare": false, "Styrelseledamot, verkställande direktör": true, "Styrelseledamöter": true}; 

for(var word in words) { 
    if(words.hasOwnProperty(word)) { 
     if(word in nicerows) { 
      var contact = this.makeContact(word, words[word]); 
      break; 
     } 
    } 
} 
+2

我認爲這對'Innehavare'(不正確的第二個參數) –

+0

Woops,只是注意到並不是所有的單詞屈服TRUE;。更新了代碼以解決這些問題。 – Nadh

0

當o中只有一個屬性時無論如何,沒有理由列出並嘗試所有可能的名稱。

for (var name in nicerows) 
    var contact = this.makeContact(nicerows[name], name!='Innehavare'); 
    // break; - not even necessary