2012-04-15 61 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