2012-05-23 75 views
2

我有一個json數組和一個簡單的函數來返回一些數據。我可以將我想要的數據記錄到控制檯(該功能目前用於測試),但不會返回。JavaScript函數沒有按預期返回數組

堆垛機,請幫助我疲憊的大腦,讓我知道我瘋了。

(代碼超級言自明,函數調用是在的.js的底部)

http://jsfiddle.net/BDJeU/

function getCountryData(data, country) 
{ 
    $.each(data, function(index) { 

     if(data[index]["Country"] == country) 
     { 
      console.log(data[index]["Country"]); 
      console.log(data[index]["data"]); 
      return data[index]["data"]; 
     } 
    }); 
} 

回答

4

試試這個:

http://jsfiddle.net/BDJeU/3/

function getCountryData(data, country) 
    { 
     var returnData; 
     $.each(data, function(index) { 

      if(data[index]["Country"] == country) 
      { 
       returnData = data[index]["data"]; 
       return false; 
      } 
     }); 
     return returnData; 
    } 

的它不工作是因爲你回到each功能的原因。因此,設置一個變量以獲取迭代之外的值,將會爲您提供所需的數據。

+0

這是我覺得有點傻的地方。謝謝! – S16

+0

@ Greg-J不用擔心。我肯定有那些答案讓我面對鏡頭的時刻。 – brenjt

1

$.grep()可能是在這種情況下較好的:http://jsfiddle.net/zerkms/BDJeU/12/

function getCountryData(data, country) 
{ 
    var result = $.grep(data, function(item) { 
     return item["Country"] == country; 
    }); 

    return result && result[0] && result[0]['data']; 
} 
+0

有趣的是,我在jQuery之前沒有看到這個函數。好答案。 – brenjt

1

你的回報在each所使用的匿名函數中。所以getCountryData本身沒有回報(所以默認返回undefined)。它需要是這樣的:

function getCountryData(data, country) 
{ 
    var result; 
    $.each(data, function(index) { 

     if(data[index]["Country"] == country) 
     { 
      console.log(data[index]["Country"]); 
      console.log(data[index]["data"]); 
      result = data[index]["data"]; 
     } 
    }); 

    return result; 
} 
1

您需要返回超出each和使用return提前打出來的each迭代:

function getCountryData(data, country) 
    { 
     var res; 
     $.each(data, function(index) { 

      if(data[index]["Country"] == country) 
      { 
       res = data[index]["data"]; 

       // once found, stop searching and 
       // break early out of the each iteration     
       return; 
      } 
     }); 
     return res; 
    } 
1

如果你真的會使用每個?如果你試圖過濾結果到一個單一的答案嘗試

function getCountryData(data, country) { 
    var matchingCountries = $.grep(data, function(row){ 
     return row.Country == country; 
    }); 
    if (matchingCountries.length > 0) 
     return matchingCountries[0].data; 
}