2012-04-15 53 views
1

我在这里寻找最佳解决方案,我有一个想法,但认为它可以做得更漂亮。Javascript,检查多个数组的数字

我在做一个简单的天气应用程序。我使用雅虎天气api,他们有天气条件的代码。

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

那么,如果你有一个更好的主意(我敢打赌)有免费建议。

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

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

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

我需要的是包含代码的匹配数的变量名?

我做了一个JS-小提琴 http://jsfiddle.net/BH8r6/

回答

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

Demo

+0

当然!非常美丽,谢谢。 – 2012-04-15 12:34:40

+0

我的荣幸.. nt建议这是最好的方法,但既然你有一个想法,我只是给你一种方法来解决相同的做法 – Baz1nga 2012-04-15 12:38:18

+0

嗯,这正是我一直在寻找。在我看来,这是一种很好的方法,因为你已经将数字绑定到一个数组。它易于阅读,易于配置和维护。 – 2012-04-15 12:43:33

1

快速查找(将雅虎代码翻译为您的标签)是将代码用作数组键(如果它们是连续的)。

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]; 
} 
+0

这将是一种方法。尽管我希望在每个数字都做到这一点之前,将我的所有号码都绑定到该类别。 感谢您的时间! – 2012-04-15 12:37:18

+0

我同意你的意见。尽管如此,这取决于“最佳解决方案”的含义。我会说我的速度是最快的,但@Engineer发布的解决方案是最漂亮但直接的解决方案。 – frogge 2012-04-15 12:42:30

+0

我同意..我只是处理很多数字,所以在我的情况下,@ Baz1nga解决方案对我的项目来说是最好的。但是在数据较少的情况下,我会提议你和工程师的metod。 – 2012-04-15 12:48:08

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

这是我的第一个想法。但是我喜欢将数字绑定到数组的想法,并且在处理这么多情况时为我节省了一些模型。 - 谢谢你的时间! – 2012-04-15 12:40:41

+0

@ChristianWerther,我很高兴能以某种方式帮助你。 – Engineer 2012-04-15 12:46:03