我有一个类似
的对象{
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()
我已经按照上面的方法尝试过,但是必须有一种更简单的方法来解决这个问题。有谁有更好的选择?
答案 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);
});