Я бы предложил такую структуру: первый элемент массива - условие
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))