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)在每一個。有沒有辦法避免這種重複?

編輯:輸入如下:

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

那麼,如果你只是把兩種情況下進入一個if語句額外OR

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

但它肯定少維護的代碼。所以我個人認爲沒有理由這樣做。