Что я могу сделать, чтобы решить убывающие логические операторы? - PullRequest
0 голосов
/ 10 июля 2019

У меня есть такой объект, как

{
  a: 'string1',
  b: 'string2',
  c: 'string3',
  d: 'string4',
  e: 'string5',
  f: 'string6',
  g: 'string7',
  h: 'string8',
  i: 'string9'
}

, и мне нужно выполнить следующую логику

if (a && (b || c || d || e || f || g || h || i)) dothis1()
if (b && (c || d || e || f || g || h || i)) dothis2()
if (c && (d || e || f || g || h || i)) dothis3()
if (d && (e || f || g || h || i)) dothis4()
if (e && (f || g || h || i)) dothis5()
if (f && (g || h || i)) dothis6()
if (g && (h || i)) dothis6()
if (h && i) dothis7()

Я пробовал это выше, но должен быть более простой способсделай это, что дует на меня.У кого-нибудь есть варианты получше?

1 Ответ

2 голосов
/ 10 июля 2019

Это легко сделать с помощью массива.Номер функции немного сложен - попробуйте также поместить все функции в массив.И используйте some для короткого замыкания в петле:

const funcArr = [dothis1, dothis2, dothis3, dothis4, dothis5, dothis6, dothis7];

Object.entries(obj).some((e, i, a) => {
  if (i + 2 == a.length && e && a[i + 1]) return (funcArr[funcArr.length - 1](), 1);
  if (e && a.slice(i + 1).some(e => e)) return (funcArr[i](), 1);
});
...