JavaScript函数没有按预期返回数组

时间:2012-05-23 04:15:35

标签: javascript jquery

我有一个json数组和一个简单的函数来返回一些数据。我可以将我想要的数据记录到控制台(该功能目前用于测试),但它没有返回。

堆叠器,请帮助我疲惫不堪的大脑让我知道我在哪里蠢蠢欲动。

(代码是超级自我解释,函数调用位于.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"];
        }
    });
}

5 个答案:

答案 0 :(得分: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功能。因此,设置一个在迭代之外被赋值的变量将为您提供所需的数据。

答案 1 :(得分: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'];
}

答案 2 :(得分: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;
}

答案 3 :(得分: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;
    }

答案 4 :(得分:1)

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

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