为什么我的记录值是正确的,但是当我返回它时,它是未定义的'?

时间:2017-04-24 15:45:19

标签: javascript jquery arrays object

我有一种感觉,我错过了一个明显的观点,但我已经尝试了所有我所知道的方式,并且我也研究了有关该主题的所有现有问题(其中大部分涉及异步调用)。

在下面的代码中,我试图找到与缩写匹配的国家/地区。当我记录结果时,我得到了正确的结果 - 但是当我返回它时,我得到一个undefined



var countries = [
    {value: 'Belgium', data: 'BE'},
    {value: 'France', data: 'FR'},
    {value: 'Bulgaria', data: 'BG'},
    {value: 'Denmark', data: 'DK'},
    {value: 'Croatia', data: 'HR'},
    {value: 'Germany', data: 'DE'},
];
        
function findCountry(code) {
  $.each(countries, function (i, obj) {
    if (obj.data === code) {
      console.log(countries[i]['value']);
      return countries[i]['value'];
    }
  });
}  

var k = findCountry('DE');
alert(k);

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

我尝试过的其他事情:

countries[i].value;
obj.value;
obj['value'];

1 个答案:

答案 0 :(得分:3)

您可以使用find代替each方法仅返回目标元素。

documentation

var countries = [
    {value: 'Belgium', data: 'BE'},
    {value: 'France', data: 'FR'},
    {value: 'Bulgaria', data: 'BG'},
    {value: 'Denmark', data: 'DK'},
    {value: 'Croatia', data: 'HR'},
    {value: 'Germany', data: 'DE'},
];
        
function findCountry(code) {
 return countries.find(function(c){
    return c.data==code;
 });
}  

var countryObject = findCountry('DE');
console.log(countryObject);
//Get only the value
console.log(countryObject.value);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>