Как сравнить каждый элемент в массиве с условиями кратными? - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть одна строка, и мне нужно передать каждый символ этой строки для кратных условий ...

что я хочу

если один символ этой строки удовлетворяет одному из нескольких условий, не оценивают это условие для следующего символа, а оценивают оставшиеся условия для оставшихся символов. Другое дело, мне нужно знать, когда все условия были выполнены. какая лучшая форма или самый оптимальный способ сделать это?

что я сделал

Я пытаюсь передать каждый элемент для нескольких условий с помощью 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 Ответ

2 голосов
/ 28 апреля 2019

Вы можете сохранять некоторые значения в массиве каждый раз, когда выполняется условие, затем вы можете сравнить длину этого массива с массивом условий

// 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');
}
...