如何防止在else if语句中重复赋值?

问题描述:

以下功能验证一个表单字段:如何防止在else if语句中重复赋值?

validateFields() { 
    let invalidFields = [] 
    utils.eachDeep(this.schema, field => { 
    if (!field.validation) return // don't validate 
    else if (field.validation.isRequired && !field.value) { 
     field.errorMessage = 'Required field error' 
     invalidFields.push(field) 
    } else if (field.validation.minLength && field.value.length < field.validation.minLength) { 
     field.errorMessage = 'Minimum length error' 
     invalidFields.push(field) 
    } else { 
     // no errors 
     field.errorMessage = '' 
    } 
    }) 

    invalidFields.length > 0 
    ? this.isFormValid = false 
    : this.isFormValid = true 
} 

正如你可以看到我在每一个else if语句重复invalidFields.push(field)。我怎样才能防止这一点?

+0

我不认为你可以给该错误信息是不同的。其他两个人有什么共同点或父母吗? –

+0

如果在第一次遇到无效字段时可以返回false,并且使用类似every()的方法进行迭代,则甚至不需要'invalidFields'。 –

+0

@le_m我需要一种方法来检查所有的字段验证后,表单是否无效。 – alex

,如果你只是想删除其他内推()如果块,你可以这样做:

validateFields() { 
    let invalidFields = [] 
    utils.eachDeep(this.schema, field => { 
    field.errorMessage = ''; 

    if (!field.validation) return // don't validate 
    else if (field.validation.isRequired && !field.value) { 
     field.errorMessage = 'Required field error' 
    } else if (field.validation.minLength && field.value.length < field.validation.minLength) { 
     field.errorMessage = 'Minimum length error' 
    } 
    if(field.errorMessage){ 
     invalidFields.push(field) 
    } 
    }) 

    invalidFields.length > 0 
    ? this.isFormValid = false 
    : this.isFormValid = true 
} 
+0

天才! (或者我可能太愚蠢了。) – alex