1

私はここで最良の解決策を探しています、私はアイデアを持っていますが、それはもっときれいにできると思っています。

簡単な天気予報アプリケーションを作成しています。そして、私はYahoo Weather APIを使用していますが、気象条件のコードがあります。

条件に応じて、私はコードを与えています。現在、50のコードがあり、私はそれらを5つのカテゴリーに分類しました。私の場合、例。私のcategoriSnowには、Yahooの条件コードが15個含まれています。

まあ、あなたがより良いアイデアを持っているなら(私はそこにあるに違いない)、自由に提案してください。

私の考えは、配列のセットから一致する値を返すことですが、それを行う方法はわかりません。

私のコードは次のようになります。

function getCondition(code) {
   var snow = [1, 2, 3],
       sun = [4, 5, 6];
} 

必要なのは、一致するコード番号を含む変数名ですか?

JS-Fiddleを作成しました http://jsfiddle.net/BH8r6/

4

3 に答える 3

1

最速のルックアップ(Yahooコードをラベルに変換する)は、コードを配列キーとして使用することです(シーケンシャルの場合)。

var weather = [];
weather[0] = "no_weather"; 
weather[1] = "snow"; 
weather[2] = "snow"; 
weather[3] = "snow"; 
weather[4] = "sun";
weather[5] = "sun";
weather[6] = "sun"; 

function getCondition(code) {
   return weather[code];
}
于 2012-04-15T12:31:36.233 に答える
0

なぜすべてを複雑にするのですか?!使用するだけ'switch'です:

function getCondition(code) {
switch( code ){
    case 1:
    case 2:
    case 4:
    case 6:
        return "snow";
    case 3:
    case 8:
    case 9:
        return "sun";
    case 5:
    case 7:
    case 10:
        return "cloudy";        
}
return "none";
} 
于 2012-04-15T12:36:21.143 に答える
0

キーが変数名であり、値が変数名に対応するコードである場合、連想配列を試してはいけません。したがって、コードは次のようになります。

var myCodeArray=[];

myCodeArray["snow"]=[1, 2, 3];

myCodeArray["sun"] = [4, 5, 6];

これで、メソッドgetConditionは次のようになります。

function getCondition(code) 
{
    for(var definedCodeName in myCodeArray)
    {
      if(myCodeArray.hasOwnProperty(definedCodeName))
      {          
        var array=myCodeArray[definedCodeName ];
        for(var i=0;i<array.length;i++)
        {
            if(array[i]==code){
                return definedCodeName ;}
        }
      }
    }
    return "Not found";
}

デモ

于 2012-04-15T12:26:19.510 に答える