如何将数组中的每个元素与多个条件进行比较?

时间:2019-04-27 21:29:31

标签: javascript jquery arrays string conditional

我有一个字符串,我需要为多个条件传递该字符串的每个字符...

我想要的

如果该字符串的一个字符满足多个条件之一,则不评估下一个字符的条件,而是评估其余字符的其余条件。另一件事是我需要知道何时满足所有条件。最佳形式或最佳方式是什么?

我做了什么

我尝试使用jquery $ .each传递多个条件的每个元素,每个条件都要遍历所有条件,并逐步到达每个条件所有字符串。这会告诉我字符串的某个元素何时满足其中一个条件,但是并不能告诉我整个字符串何时满足所有条件。

// Multiple conditions
const conditions = [
      {
        isInvalid: function(str) {
          return !str.match(/[a-z]/g);
        }
      },
      {
        isInvalid: function(str) {
          return !str.match(/[A-Z]/g);
        }
      },
      {
        isInvalid: function(str) {
          return !str.match(/[0-9]/g);
        }
      },
      {
        isInvalid: function(str) {
          return !str.match(/[\!\@\#\$\%\^\&\*]/g);
        }
      },
      {
        isInvalid: function(input) {
          return str.length < 8;
        }
      },
    ];

const stringToCheck = 'mystring';

$.each( conditions , ( i, condition ) => {
    const isInvalid = condition.isInvalid( mystring );

    if ( isInvalid ) {
      return true

    } else {
      retur false
    }
});

1 个答案:

答案 0 :(得分:2)

您可以在每次条件通过时将一些值保存到数组中,然后可以将该数组的长度与条件数组进行比较

// Multiple conditions
const conditions = [
    {
        isInvalid: function(str) {
            return !str.match(/[a-z]/g);
        }
    },
    {
        isInvalid: function(str) {
            return !str.match(/[A-Z]/g);
        }
    },
    {
        isInvalid: function(str) {
            return !str.match(/[0-9]/g);
        }
    },
    {
        isInvalid: function(str) {
            return !str.match(/[\!\@\#\$\%\^\&\*]/g);
        }
    },
    {
        isInvalid: function(input) {
            return str.length < 8;
        }
    },
];

const stringToCheck = 'mystring';

const results = [];

$.each( conditions , ( i, condition ) => {
    const isInvalid = condition.isInvalid( stringToCheck );

    if ( isInvalid ) {
        return true

    } else {

        results.push(true);
        return false
    }
});

if (results.length === conditions.length) {
    console.log('All conditions fulfilled');
}