如何防止重复以下.push()动作?

时间:2016-11-24 09:22:29

标签: javascript function

我写了一个验证表格的功能。我使用every方法确保传递所有条件。如果该字段无效,则返回虚假值并将其名称推送到invalidFields数组。如果一切顺利,函数将返回true

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 个答案:

答案 0 :(得分:1)

好吧,如果您只是将两个案例放入一个带有额外OR的if语句:

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

但它绝对不易维护的代码。所以我个人认为没有理由这样做。