Javascript 否则重构将包含逻辑
我的目标是以更合适的形式重构以下条件。用更好的东西来代替这些条件将是非常好的 这种逻辑的主要思想是,这些“如果”的顺序不应该改变。即,若数组中至少存在一个“j”值,则即使存在其他值,也应返回该值Javascript 否则重构将包含逻辑,javascript,underscore.js,Javascript,Underscore.js,我的目标是以更合适的形式重构以下条件。用更好的东西来代替这些条件将是非常好的 这种逻辑的主要思想是,这些“如果”的顺序不应该改变。即,若数组中至少存在一个“j”值,则即使存在其他值,也应返回该值 var items = [j,a]; if(_.contains(items, "j")) { return "j"; } else if(_.contains(items, "a")) { return "a"; } else if(_.contains(items, "l")) {
var items = [j,a];
if(_.contains(items, "j")) {
return "j";
} else if(_.contains(items, "a")) {
return "a";
} else if(_.contains(items, "l")) {
return "l";
}
return "d";
任何想法都将不胜感激。这就是你一直在寻找的“更好的东西”吗?(请注意,字母的顺序是向后的,这样,如果包含j,则返回的字母将是…)
更新:如果要保持断开状态,请使用此选项
var items = [j,a];
var matchItems = ["j", "a", "l"];
var letter = "d"; //default
matchItems.every(function(item) {
if(_.contains(items, item)) {
letter = item;
return false;
}
return true;
});
return letter;
这就是你想要的“更好的东西”吗?(请注意,字母的顺序是向后的,这样,如果包含j,则返回的字母将是…)
更新:如果要保持断开状态,请使用此选项
var items = [j,a];
var matchItems = ["j", "a", "l"];
var letter = "d"; //default
matchItems.every(function(item) {
if(_.contains(items, item)) {
letter = item;
return false;
}
return true;
});
return letter;
下面是一些变化。不过,我不会说它们中的任何一个是更合适或更好的形式。(除非你对“更好”的定义恰好与其中的某些内容相匹配。)
//优点:很短
//缺点:效率不高(计算整个交叉口)
功能测试(项目){
var res=uu.first(u.intersection(items,['j','a','l']);
返回res==未定义的“d”:res;
}
log(test(['j','a']);
log(test(['x','y'])代码>
下面是一些变体。不过,我不会说它们中的任何一个是更合适或更好的形式。(除非你对“更好”的定义恰好与其中的某些内容相匹配。)
//优点:很短
//缺点:效率不高(计算整个交叉口)
功能测试(项目){
var res=uu.first(u.intersection(items,['j','a','l']);
返回res==未定义的“d”:res;
}
log(test(['j','a']);
log(test(['x','y'])代码>
这可能更适合于此可能更适合于此可能会更慢,因为不存在中断条件-如果每个项目中只包含少数项目,则可能不是问题list@Wolfgang足够公平的更新…这将是缓慢的,因为没有中断条件-可能不是一个问题,如果只有少数项目包括每个list@Wolfgang足够公平更新。。。