gpt4 book ai didi

javascript - 避免嵌套条件中的重复

转载 作者:行者123 更新时间:2023-11-30 17:50:27 25 4
gpt4 key购买 nike

对于类似于以下的嵌套条件,您如何优化分支以增强性能和/或可读性?由于许多潜在案例中存在循环,因此将重复条目合并为更实用的函数会更有效。

//a is defined either 1, 2, or 3
//b is defined either true or false

for(var i=0; i<hugeNumber; i++){
switch(a){
case 1:
if(b){
for(objects in longlist){
objects.color = object.c;
objects.position = object.x
}
}else{
for(objects in longlist){
objects.color = object.c;
objects.position = object.y
}
case 2:
if(b){
for(objects in longlist){
objects.color = object.b;
objects.position = object.x;
}
}else{
for(objects in longlist){
objects.color = object.b;
objects.position = object.y;
}
case 3:
if(b){
for(objects in longlist){
objects.color = blackColor;
objects.position = object.x;
}
}else{
for(objects in longlist){
objects.color = blackColor;
objects.position = object.y;
}
}
}

将条件语句放在一个包罗万象的 for 循环中似乎同样不合理。

理想情况下,目标变量可以在开始时定义,当条件已知时 - 因为条件 a 始终为 0 生成颜色 c,为 1 生成颜色 b,为 2 生成 blackColor,而条件 b 始终为 true 生成位置 x位置 y 为 false。

我已经看到这个问题针对 PHP 和 Ruby 的变体,但不太确定如何将这些解决方案应用于 JavaScript。我能想到一些可行的方法,但到目前为止我还无法使代码在语法上起作用。

更新/解决方案:一个答案促使我发现这可以通过 eval() 有效地完成:

var targetColor;
var targetPosition;

switch(a){
case 1: targetColor = "objects.c"; break;
case 2: targetColor = "objects.b"; break;
case 3: targetColor = "blackColor"; break;
}
if(b){
targetPosition = "objects.x";
}else{
targetPosition = "objects.y";
}

for(var i=0; i<hugeNumber; i++){
for(objects in longlist){
objects.color = eval(targetColor);
objects.position = eval(targetPosition);
}
}

如果有比这更好的方法,我绝对愿意接受其他建议 - 我知道 eval 有时可能很危险。

最佳答案

略微紧凑但可读性强,没有不必要的复查:

var coord = b ? 'x' : 'y';
var col = '';
switch(a){
case 1: col = 'c';
case 2: col = 'b';
// may add more cases...
}
for(objects in longlist) {
object.color = object[col] || 'blackColor';
object.position = object[coord];
}

关于javascript - 避免嵌套条件中的重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19139146/

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