我使用下面的if语句来比较表中同一列中的2行。我多次使用相同的代码块在不同的列上执行相同的计算。
基本上,我希望箭头显示一行与下一行之间的值移动,以及值所属的阈值。因此,例如,在下面的代码中,任何大于15的应该是一个红色箭头,如果之前的值低,那么箭头应该指向上方。我使用稍后在我的代码中从另一个位置调用的图像来渲染箭头,因此if语句只给出了相应箭头的字符串。
正如我上面所说,我有很多次代码块。奇怪的是,输出适用于某些变量而不适用于其他变量;即使它是替换变量名称的完全相同的代码!它没有明显的原因让我错了。
我有太多条件吗?有没有更有效的方法来做我想做的事情?
非常感谢任何帮助!
谢谢, 卡尔
var Arrow = " ";
if(KPI[0] > KPI[1] && KPI[0] >= 15)
{
Arrow = "redarrowup.png";
}
else if(KPI[0] < KPI[1] && KPI[0] >= 15)
{
Arrow = "redarrowdown.png";
}
else if(KPI[0] = KPI[1] && KPI[0] >= 15)
{
Arrow = "redarrowflat.png";
}
else if(KPI[0] > KPI[1] && KPI[0] >= 10 && KPI[0] < 15)
{
Arrow = "yellowarrowup.png";
}
else if(KPI[0] < KPI[1] && KPI[0] >= 10 && KPI[0] < 15)
{
Arrow = "yellowarrowdown.png";
}
else if(KPI[0] = KPI[1] && KPI[0] >= 10 && KPI[0] < 15)
{
Arrow = "yellowarrowflat.png";
}
else if(KPI[0] > KPI[1] && KPI[0] < 10)
{
Arrow = "greenarrowup.png";
}
else if(KPI[0] < KPI[1] && KPI[0] < 10)
{
Arrow = "greenarrowdown.png";
}
else
{
Arrow = "greenarrowflat.png";
}
答案 0 :(得分:5)
我建议分别表达不同的概念,然后在最后将它们组合起来。像这样:
var arrow;
var movement = "flat";
var band = "green";
if (KPI[0] > KPI[1]) {
movement = "up";
} else if (KPI[0] < KPI[1]) {
movement = "down";
}
if (KPI[0] >= 15) {
band = "red";
} else if (KPI[0] >= 10) {
band = "yellow";
}
arrow = band + "arrow" + movement + ".png";
您还可以将这些元素中的每一个推迟到函数中,因此最后一行将为:
arrow = getBand(KPI[0], KPI[1]) + "arrow" + getMovement(KPI[0], KPI[1]) + ".png";
这样可以更容易地改变频段,而不是另外这个逻辑。
答案 1 :(得分:3)
我会说:
function direction(val1, val2){
return val1 < val2 ? "down" : val1 == val2 ? "flat" : "up";
}
function color(val){
return val >= 15 ? "red" : val >= 10 ? "yellow" : "green";
}
var arrow = color(KPI[0]) +"arrow"+ direction(KPI[0], KPI[1]) +".png";
如果您不理解,我总是告诉别人不要复制和粘贴代码。您可能不熟悉?:
位。它是ternary operator(内联if)。
如果您需要多个箭头,我建议您添加一个生成箭头的功能:
function arrow(val1, val2){
return color(val1) +"arrow"+ direction(val1, val2) +".png";
}
var kpiArrow = arrow(KPI[0], KPI[1]);
答案 2 :(得分:1)
乍一看,我会说你有一个“=”,你需要一个“==”(甚至“===”)。例如
if(KPI[0] = KPI[1] && KPI[0] >= 15)
应该是
if(KPI[0] == KPI[1] && KPI[0] >= 15)
(或者就像我说的那样===)。等等。 “=”是赋值运算符,它将KPI [0]的值设置为KPI [1]的值,然后返回该值,因此您基本上执行以下操作:
KPI[0] = KPI[1];
if(KPI[1] && KPI[0] >= 15)
我怀疑是什么意思。也就是说,其他几个人已经说过有更好的方法来构建代码。
答案 3 :(得分:0)
我认为问题不在于if的数量。但您可以更好地构建代码:
var direction, color;
// set direction
if(KPI[0] > KPI[1])
{
direction = "up";
}
else if(KPI[0] < KPI[1])
{
direction = "down";
}
else if(KPI[0] == KPI[1]) // there was an error in this condition, by the way
{
direction = "flat";
}
// set color
if(KPI[0] >= 15)
{
color = "red";
}
else if(KPI[0] >= 10 && KPI[0] < 15)
{
color = "yellow";
}
else if(KPI[0] < 10)
{
color = "green";
}
var Arrow = color + "arrow" + direction + ".png";
答案 4 :(得分:0)
这个怎么样:
var arrow = "";
if (KPI[0] >= 15) {
arrow = "redarrow";
}
else if (KPI[0] >= 10) {
arrow = "yellowarrow";
}
else if (KPI[0] < 10) {
arrow = "greenarrow";
}
if (KPI[0] < KPI[1]) {
arrow += "down.png";
}
else if (KPI[0] > KPI[1]) {
arrow += "up.png";
}
else if (KPI[0] == KPI[1]) {
arrow += "flat.png";
}