2016-11-24 13 views
0

私はフォームを検証する機能を書いています。私はeveryメソッドを使用して、すべての条件が渡されていることを確認しています。フィールドが有効でない場合、偽値が返され、その名前がinvalidFields配列にプッシュされます。すべてがうまくいけば、この関数はtrueを返します。次の.push()アクションを繰り返さないようにする方法は?

validateForm() { 
    this.isValid = this.validatingFields.every(field => { 
    const pattern = field.validation.pattern 
    const match = field.validation.match 
    if (match) { 
     const matchRegex = this.convertToRegex(match) 
     if (!matchRegex.test(field.value)) this.invalidFields.push(field.name) 
     return matchRegex.test(field.value) 
    } 
    if (pattern) { 
     if (pattern.test(field.value)) this.invalidFields.push(field.name) 
     return pattern.test(field.value) 
    } 
    return true 
    }) 
} 

しかし、あなたは私がすべてのif文でthis.invalidFields.push(field.name)を行う必要が見ることができますように。この繰り返しを避ける方法はありますか?あなただけの余分なORとif文1に両方のケースを置けばまあ

validatingFields: [{ 
     name: 'name', 
     type: 'text', 
     value: '', 
     validation: { 
     required: true 
     } 
    }, { 
     name: 'company', 
     type: 'text', 
     value: '', 
     validation: { 
     // pattern: util.regex().email 
     match: 'name' 
     // minLength: 2, 
     // maxLength: 4 
     } 

答えて

1

EDIT:

validateForm() { 
    this.isValid = this.validatingFields.every(field => { 
     const pattern = field.validation.pattern 
     const match = field.validation.match 
     if ((match && !this.convertToRegex(match).test(field.value)) || (pattern && pattern.test(field.value))) { 
      this.invalidFields.push(field.name) 
      return match ? this.convertToRegex(match).test(field.value)) : pattern.test(field.value) 
     } 
     return true 
    }) 
} 

しかし、それは間違いなく少なく、保守コードだ入力は次のようになります。だから私は個人的にそれをする理由は見当たらない。

関連する問題