@Zendor18

Последовательная проверка условий с вложенностью?

Стоит задача реализовать последовательную проверку условий со вложенностью. Попытаюсь описать:
(
{ условие1 }
[ и ]
{ условие2 }
)
[ или ]
(
{ условие3 }
[ и ]
(
{ условие 4 }
[ или ]
{ условие 5 }
)
)

Выглядит это примерно так, т.е. это по сути очередь, но со вложенностью результатом всех вычислений будет true/false.
() - это уровень группа.
{} - условие
[] - логический оператор
Т.е если на своем уровне вложенности у нас условие провалилось, то мы поднимаемся на уровень выше, и т.д. вложенность может быть любая.

Возможно проще будет представить это так:

(Условие1 && Условие2) // (Условие3 && (условие4 || условие 5))

Т.е. у нас имеется несколько функций которые и являются условием (проверка) их можно комбинировать/группировать как угодно и с любой вложенностью.
Как это можно реализовать в JS?
Я не прошу делать за меня, возможно кто то знает полезные статьи по этому вопросу и т.д. или просто подкинуть идею.
  • Вопрос задан
  • 124 просмотра
Решения вопроса 1
@dimoff66
Кратко о себе: Я есть
Я бы предложил такую структуру: первый элемент массива - условие and или or, затем сами условия, любая часть условий сама может быть массивом, например

const conditions= [
    'and',
    a === 3, 
    b === 7, 
    c !== 4,
    ['or', d < 15, c !== 5]
]


и функция расчета

const countValue = (arr) => {
   if(!Array.isArray(arr)) return arr
   const cond = arr[0] === 'or' 
      ? Array.prototype.some
      : Array.prototype.every
   return cond.bind(arr.slice(1), countValue)()
}


Соответсвенно условие (a === 7 && b === 4) || (a < 8 && b < 5) надо преобразовать в массив

const conditions = [
  'or',
  ['and', a === 7, b === 4],
  ['and', a < 8, b < 5]
]
console.log('result:' + countValue(conditions))
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
KornevaViktoria
@KornevaViktoria
Frontend Developer
1) Создаете функцию
2) Создаете переменную, которая будет хранить итоговый результат
3) Делаете проверки с помощью if, else if, которые переопределяют переменную
4) Возвращаете переменную созданную на 2 этапе

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

const blabla = this.nameFunction();

function nameFunction () {
    let result = false;

    if (Условие1 && Условие2) { переопределяем result}
    else if (Условие3 && (условие4 || условие 5)) {переопределяем result}
    else {переопределяем result}

    return result;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы