2016-04-22 9 views
0

Die folgende Funktion durchläuft die Werte eines Objekts. Wenn der Wert leer ist this.hasInvalidValue wird auf true, wenn sie nicht leer ist this.hasInvalidValue-false gesetzt:Wie setze ich eine Variable auf false, wenn mindestens ein Element in einer Schleife false zurückgibt?

user: { 
    email: '', 
    password: '' 
} 

function validate() { 
    for (let key in this.object) { 
    const isValueInvalid = !this.object[key] 
    if (this.isKeyRequired(key) && isValueInvalid) { 
     this.hasInvalidValue = true 
    } 
    if (this.isKeyRequired(key) && !isValueInvalid) { 
     this.hasInvalidValue = false 
    } 
    } 
} 

Es gibt ein Problem mit diesem. Betrachten Sie ein Login-Formular:

Email // empty (this.hasInvalidValue is set to false) 
Password // not empty (this.hasInvalidValue is set to true) 

// Final value of this.hasInvalidValue is true. Good 

Email // not empty (this.hasInvalidValue is set to false) 
Password // empty (this.hasInvalidValue is set to true) 

// Final value of this.hasInvalidValue is false. Not good 

Wie ich es kann so validate Sätze this.hasInvalidValue-false, wenn mindestens 1 Wert false ist. Und zu true nur wenn alle Werte nicht leer sind?

+0

Sobald Sie ein ungültiges Feld finden, können Sie eine 'break;' - Anweisung verwenden, um die for-Schleife zu verlassen, da die restlichen Felder nicht überprüft werden müssen. – scoots

+0

Was ist 'this.object'? Bitte stellen Sie Ihre Frage klarer. – PHPglue

Antwort

2

Wie wäre es damit?

function validate() { 
    this.hasInvalidValue = true 
    for (let key in this.object) { 
    const isKeyInvalid = !this.object[key] 
    if (this.isKeyRequired(key) && !isKeyInvalid) { 
     this.hasInvalidValue = false 
     break; 
    } 
    } 
} 
+0

Sieht nach rechts aus, aber das OP möchte nicht, dass validate() '' true' oder 'false' zurückgibt, er will' this.hasInvalidValue' auf 'true' oder' false' setzen. – RJM

+0

@RJM Danke! Code bearbeitet –

Verwandte Themen