我可以做些什么来解决逻辑运算符减少的问题?

What can I do to address diminishing logical operators?

我有一个像

这样的对象
{
  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()

我已经按照上面的方法尝试过了,但是必须有一种更简单的方法来做到这一点,这让我很吃惊。有人有更好的选择吗?

使用数组很容易做到这一点。函数编号有点棘手 - 尝试将所有函数也放入一个数组中。并使用 some 到 short-circuit 循环:

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);
});