2017-06-23 15 views
0

Ich vermisse etwas, wenn jemand mir bitte erklären kann. Ich versuche, bestehenden Code in den ternären Operator Weg zu schreiben. Ich erhalte die folgende Konsole Fehler:Nicht verstanden verschachtelt ternären Operator

Uncaught SyntaxError: Unexpected token }

, die ich verstehe, gibt es eine Bedingung nicht richtig formatiert, die ich nicht zu finden scheinen. Also bin ich mir nicht sicher, was ich vermisse oder ob ich vielleicht etwas in der Filterfunktion falsch verstehe? Ist das nicht das? item.verified === true nicht annehmen, dass die Objekte, die wahr sind, automatisch zurückgegeben werden?

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 
}) 

Die Syntax, die ich verstehen:

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

Hier ist die Geige ich versucht habe zu spielen, um: https://jsfiddle.net/phfilly/ya73e325/7/

+2

"Ich versuche, bestehenden Code in den ternären Operator Weg zu schreiben." - Nicht. Wie Sie bemerkt haben, ist es schwer zu verstehen. Machen Sie keine Arbeit mehr für diejenigen, die Ihren Code pflegen müssen. Sie werden dich dafür hassen. Diese Person ist wahrscheinlich Sie, aber 6 Monate älter. – Quentin

+0

Danke, ich verstehe und fühle mich genauso.Allerdings möchte das Unternehmen Standards integrieren und sagte mir, es zu ändern #death – Muppet

+0

Es gibt einen Syntaxfehler im veröffentlichten Code. Es kann nicht mit 'enden? Artikel ". – RobG

Antwort

1

Yup. Deine Syntax stimmt nicht. Um zu verstehen, warum Ihr Code nicht funktioniert, würde es hilfreich sein, wenn Sie Ihre if-else Anweisungen etwas umschreiben würden.

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

Um dies:

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

Nun folgen ternäre Operatoren eine ähnliche verschachtelte Art und Weise.

cond1 ? val1 : (val2) 

Wo val2 => cond2 ? val3 : (val4)

Wo val4 => cond3 ? val5 : val6

So, jetzt können Sie Ihren Ausdruck wie folgt umschreiben kann:

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

Klammern Angelegenheiten hier, weil es eng die verschachtelte wenn- nachahmt von oben.

Beachten Sie auch, dass für den innersten Ausdruck ein Rückgabewert im else angegeben werden muss. Ich habe es auf null gesetzt, aber Sie können zurückgeben, was Sie wollen. Beachten Sie, dass dies der tatsächliche Grund dafür ist, dass Ihr Code fehlgeschlagen ist. Entschuldigung, wenn die Antwort lang war, aber ich wollte Ihnen helfen, verschachtelte ternäre Operatoren zu verstehen.

+0

danke für die Erklärung, sehr geschätzt. – Muppet

+0

Kein Problem ... :) –

1

Ternäre Operator wie folgt aussieht:

something = (condition) ? a_value : a_different_value; 

Sie haben : a_different_value auf den letzten Fall vergessen.

0

Versuchen Sie, diese

Sie haben eine Bedingung für den Ternary Betreiber haben als

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