1

テーブルの同じ列の2つの行を比較するために、以下のifステートメントを使用しています。同じコードブロックを複数回使用して、異なる列で同じ計算を実行します。

基本的に、ある行と次の行の間の値の移動と、値が入るしきい値の両方を矢印で示したいと思います。したがって、たとえば、以下の私のコードでは、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";
}
4

5 に答える 5

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";

これにより、この他のロジックを分離してバンドを簡単に変更できます。

于 2012-09-12T14:50:19.530 に答える
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";

あなたがそれを理解していないなら、私はいつも人々にコードをコピーして貼り付けないように言います。?:あなたはそのビットに慣れていないかもしれません。三項演算子です(インラインの場合)。

複数の矢印が必要な場合は、矢印を生成するための関数も追加することをお勧めします。

function arrow(val1, val2){
  return color(val1) +"arrow"+ direction(val1, val2) +".png";
}

var kpiArrow = arrow(KPI[0], KPI[1]);
于 2012-09-12T14:51:57.960 に答える
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)

私が疑うのは意図です。とはいえ、他の何人かがすでに言っているように、コードを構造化するためのより良い方法があります。

于 2012-09-12T14:50:24.610 に答える
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";
于 2012-09-12T14:48:41.743 に答える
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";
}
于 2012-09-12T14:48:49.100 に答える