2016-08-05 4 views
2

現在、Webアプリケーションをプログラミング中です。ユーザーは2005年と2014年のような2年間の期間を入力することができ、その後2年間だけすべての活動を表示するので、より具体的には2005年、2006年、2007年のすべての活動を見ることができます。リファクタリングif/elseステートメント(2年間の期間)

これをダイナミックかつシンプルにするために、毎年の活動リスト(json2005、json2006、...)を作成し、毎回ではなく(json2005-2006、json2005-2007)、次にユーザーが一緒に選んだ年の間にすべてのリストをそのタイムスパンの大きなリストにマージします。コードは次のようになります。

if (year1 == year2) { 
    json = window["json" + year1]; 
} 
else { 
    if (year2 == (year1 + 1)) { 
     json = $.extend(window["json" + year1], window["json" + (year1+1)]); 
    } 
    else { 
     if (year2 == (year1 + 2)) { 
      json = $.extend(window["json" + year1], window["json" + (year1+1)], window["json" + (year1+2)]); 
     } 
     else { 
      if (year2 == (year1 + 3)) { 
       json = $.extend(window["json" + year1], window["json" + (year1+1)], window["json" + (year1+2)], window["json" + (year1+3)]); 
      } 
     } 
    } 
} 

(あなたはそれが何を意味するのか不思議に思うならばwindow[]は、変数を動的にする方法です。)

コードは次のように説明し

YEAR1がYEAR2に等しい場合、すべてが明確です.1年しかないので、year1のリストを取っています(year2を使用することもできます)。

year2がyear1(year2 = year1 + 1)の直後にある場合は、それらの間に年が存在しないため、最初の1年と2年目の2つのリストが必要です。基本的には、 year2からboomまで、私たちは1年目から2年目までのすべてを網羅した大きなリストを持っています。

year2が遠くにある場合、すべてが少し醜いです。ご覧のコードで、year2がyear1 + 3ならば、4つの異なるリストをマージして、すべてのリストを書き留めなければなりません。

json = $.extend(window["json" + year1], window["json" + (year1+1)], window["json" + (year1+2)], window["json" + (year1+3)]); 

Buuutは、私のWebアプリは、1995年から2020年まで、処理するために25年持って、それは325本の別のマージラインを作る:だから我々は記述する必要があります。

私の質問です:今よりずっと短くする方法はありますか?

私は方法があると思うので、私は自分でそれを見つけるには十分なJavaScriptの経験と方法の知識がありません。つまり、問題はかなりシンプルです。何年にわたりマージしなければならないかを宣言するために2年の違いを知るためのインデックスや方法が必要ですが、ここで私はあきらめました。

また、私は分解を使用する考えがありましたが、それは私の頭にはあまりにも複雑です。しかし、おそらく因数分解がキーワードであり、解決の手がかりになるかもしれません。私は本当に知らない。 if/else文を$.extend()に書くことができれば助けになるかもしれません。関数(できますか?)。

答えて

2

これはいかがですか?

json = data["json" + year1]; 
var this_year = year1 + 1; 
while(this_year <= year2) { 
    json = $.extend(json, data["json" + this_year]); 
    this_year = this_year + 1; 
} 

すべてを一度に拡張しようとするのではなく、各年のデータとともに徐々に拡張します。 $.extendは、共通鍵の値を最新の鍵の値に置き換えることに注意してください。少し難しくなった値をマージする必要がある場合(ただし、実行可能です - 例が必要です)

+0

私は実際にそのコードを書いています '(function x){concat || $ .extend {{concat:function(b、c){var a = []; for (jQuery); ' を拡張してコンテナに変更しましたが、私の質問をしたいと思っていました。(typeof a ==' object ')a = a.concat(arguments [x]); ここに元のコードが表示されます。 http://s448350928.online.de/pumpn/mag/collabplan/collabplan。js この回避コードとのマージ作業は明確です。 –

+0

これは私を少し超えています!私はそれが動作し、適応することができると信じています。参考までに私のコードでいくつかのタイプミスが修正されました。 – Owen

+0

大丈夫、ありがとう...私はあなたのコードを試して、すぐに私の年を入力すると私のアプリケーションがクラッシュ...私はもはや方法が何であるか知りません:D 私はエラーを取得しません、完全なサイトがクラッシュする:/ –

関連する問題