1

我在这里寻找最好的解决方案,我有一个想法,但认为它可以做得更漂亮。

我正在制作一个简单的天气应用程序。如果他们有天气条件的代码,我正在使用 Yahoo Weather api。

根据条件,我给出一个代码。现在,有 50 个代码,我将它们分为 5 个类别。在我的情况下,前。我的类别 Snow 包含 15 个 Yahoo 的条件代码。

好吧,如果您有更好的想法(我敢打赌有),可以自由提出建议。

我的想法是从一组数组中返回匹配值,但不知道如何去做。

我的代码现在看起来像这样:

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

Why dont you try an associative array when your key is your variable name and your values is the corresponding code for the variable name, thus your code will be something like this:

var myCodeArray=[];

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

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

now your method getCondition will be

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

Demo

于 2012-04-15T12:26:19.510 回答