gpt4 book ai didi

javascript - 根据 bool 值的不同组合做不同的事情时如何消除if-else?

转载 作者:数据小太阳 更新时间:2023-10-29 04:14:23 29 4
gpt4 key购买 nike

例如,假设我需要根据 bool 值的组合做不同的事情:cond_0、cond_1 和 cond_2:

cond_0 cond_1 cond_2
false false false a();
false false true b();
.
.
.
true true true h();

看起来好像将位号映射到函数:

000:a()
001:b()
.
.
.
111:h()

虽然一般规则看起来很简单,但我不知道没有 if-else 怎么写,现在的形式是这样的:

var f=function(cond_0,cond_1,cond_2){
if(!cond_0 && !cond_1 && !cond_2){
a();
}else if( cond_0 && !cond_1 && !cond_2)){
b();
}else if(!cond_0 && cond_1 && !cond_2)){
c();
}else if( cond_0 && cond_1 && !cond_2)){
d();
}else if(!cond_0 && !cond_1 && cond_2)){
e();
}else if( cond_0 && !cond_1 && cond_2)){
f();
}else if(!cond_0 && cond_1 && cond_2)){
g();
}else if( cond_0 && cond_1 && cond_2)){
h();
}
}

很长,很难读懂。而当一个新的 bool 条件cond_3加入后,修改代码就惨不忍睹了:

if(!cond_0 && !cond_1 && !cond_2 && !cond_3){
a();
}else if( cond_0 && !cond_1 && !cond_2 !cond_3)){
b();
}
.
.
.

有没有办法去掉if else,让cond_0、cond_1、cond_2在函数内只出现一次,并且在加入cond_3时也方便增加新的函数?我想要这样的东西:

var f=function(cond_0,cond_1,cond_2){
var magic=(000:a,001:b,010:c...);
magic(cond_0,cond_1,cond_2)();
}

最佳答案

查看此实现。这里所有的三个参数(预期的 bool 值)都乘以它们的位值以形成数字,然后用 '0' 填充到所需的长度。在 magic 对象中搜索此值,并调用已定义的函数。

var a = function() {
console.log('a() called');
};
var b = function() {
console.log('b() called');
};
var c = function() {
console.log('c() called');
};

var f = function(cond_0, cond_1, cond_2) {
var cond = ((cond_0 * 100) + (cond_1 * 10) + (cond_2)).toString().padStart(3, '0');
var magic = {
'000': a,
'001': b,
'010': c
};
if (typeof magic[cond] === 'function') {
magic[cond]();
} else {
console.log('No function defined for this cond');
}
}

f(false, false, false);
f(false, false, true);
f(false, true, false);
f(true, false, false);

关于javascript - 根据 bool 值的不同组合做不同的事情时如何消除if-else?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48799549/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com