我该怎么办才能解决逻辑运算符不断减少的问题?

时间:2019-07-09 22:48:29

标签: javascript object 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()

我已经按照上面的方法尝试过,但是必须有一种更简单的方法来解决这个问题。有谁有更好的选择?

1 个答案:

答案 0 :(得分:2)

使用数组很容易做到这一点。函数编号有些棘手-尝试将所有函数也放入数组中。并使用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);
});