2017-06-23 23 views
0

我錯過了某些東西,如果有人可以請向我解釋。我試圖將現有代碼重新編寫爲三元運算符方式。 我得到以下控制檯錯誤:不理解嵌套的三元運算符

Uncaught SyntaxError: Unexpected token }

我的理解有我似乎無法找到格式不正確的條件。所以我不確定我錯過了什麼,或者如果我可能誤解了過濾器功能中的某些內容?不是嗎? item.verified === true不假設自動返回真的對象?

var engagement = "social"; 
var audience = [{ 'verified': true, 'name': 'Steve'}, 
       { 'verified': false, 'name': 'Phil'}, 
       { 'verified': true, 'name': 'Jason'}]; 
let data = []; 

data = audience.filter((item) => { 
    (engagement === "social") 
    ? item.verified === true 
    : (engagement === 'social-crm') 
    ? item.verified === false 
    : (engagement === 'all') 
    ? item 
}) 

,我明白的語法:

data = audience.filter((item) => { 
       if (this.engagement === 'social-crm') { 
       return item.verified === true; 
       } else if (this.engagement === 'social') { 
       return item.verified === false; 
       } else if (this.engagement === 'all') { 
       return item; 
       } 
}); 

這是我一直在試圖玩弄小提琴: https://jsfiddle.net/phfilly/ya73e325/7/

+2

「我正在嘗試將現有代碼重新編寫爲三元運算符方式。」 - 別。正如你所注意到的,這很難理解。不要爲需要維護代碼的人做更多的工作。他們會恨你的。那個人很可能是你,但大概6個月大。 – Quentin

+0

謝謝,我理解並且以同樣的方式感受。然而,公司希望納入標準並告訴我改變它#death – Muppet

+0

發佈的代碼中存在語法錯誤。它不能以'?結束? item'。 – RobG

回答

1

燁爲指出。你的語法不對。要理解你的代碼不工作的原因,如果你稍微重寫一下你的代碼,這會有所幫助。

if (this.engagement === 'social-crm') { 
    return item.verified === true; 
} else if (this.engagement === 'social') { 
    return item.verified === false; 
} else if (this.engagement === 'all') { 
    return item; 
} 

要這樣:

if(this.engagement === 'social-crm') { return item.verified === true; } 
else { 
    if(this.engagement === 'social') {item.verified === false; } 
    else { 
     if(this.engagement === 'all') {return item;} 
    } 
} 

現在,三元運營商遵循類似的嵌套方式。

cond1 ? val1 : (val2) 

val2 => cond2 ? val3 : (val4)

val4 => cond3 ? val5 : val6

所以,現在你可以重寫你的表情是這樣的:在這裏

this.engagement === 'social-crm' ? item.verified === true : 
          (this.engagement === 'social' ? item.verified === false : 
                  (this.engagement === 'all' ? item : null)) 

括號的問題,因爲它接近地模擬嵌套如果 - 來自上面的遺傳。

另請注意,對於最內表達式,必須指定else 中的返回值。我已將其設置爲空,但您可以返回想要的內容。請注意,這是您的代碼失敗的真正原因。道歉,如果答案很長,但我想幫助你瞭解嵌套的三元運算符。

+0

感謝您的解釋,非常感謝。 – Muppet

+0

沒問題... :) –

1

三元運算符是這樣的:

something = (condition) ? a_value : a_different_value; 

您忘記了最後一種情況下的: a_different_value

0

試試這個

你必須有一個條件三元操作員通過@Quentin

data = audience.filter((item) => { (engagement === "social") ? 
item.verified === true : (engagement === 'social-crm') ? 
item.verified === false : (engagement === 'all')? 
item : null})