2

我有一个 json 数组和一个简单的函数来返回一些数据。我可以将我想要的数据位记录到控制台(该函数当前执行此操作以进行测试),但它没有返回。

Stackers,请帮助我疲惫的大脑,让我知道我在哪里搞砸了。

(代码超级不言自明,函数调用在.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

5 回答 5

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函数。因此,设置一个在迭代之外分配值的变量将为您提供所需的数据。

于 2012-05-23T04:19:17.160 回答
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'];
}
于 2012-05-23T04:19:07.020 回答
1

您的回报在each. 所以getCountryData本身没有返回(所以默认返回未定义)。它需要是这样的:

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;
}
于 2012-05-23T04:20:08.783 回答
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;
    }
于 2012-05-23T04:22:17.063 回答
1

你真的应该使用每个吗?如果您尝试将结果过滤为单个答案,请尝试

function getCountryData(data, country) {
    var matchingCountries = $.grep(data, function(row){
        return row.Country == country;
    });
    if (matchingCountries.length > 0)
        return matchingCountries[0].data;
}
于 2012-05-23T04:34:44.907 回答