JavaScript函数未按预期返回数组

JavaScript函数未按预期返回数组,javascript,jquery,Javascript,Jquery,我有一个json数组和一个简单的函数来返回一些数据。我可以将我想要的数据记录到控制台(该函数目前执行此操作以进行测试),但它不会返回 斯塔克尔斯,请帮我恢复一下疲惫的大脑,告诉我哪里出了差错 (代码非常简单,函数调用位于.js的底部) 在这种情况下可能更好: 试试这个: 它不起作用的原因是您返回到每个函数。因此,设置一个在迭代之外赋值的变量将获得所需的数据。您的返回值位于每个使用的匿名函数中。因此getCountryData本身没有返回(因此默认为返回未定义)。它应该是这样的: functi

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

斯塔克尔斯,请帮我恢复一下疲惫的大脑,告诉我哪里出了差错

(代码非常简单,函数调用位于.js的底部)

在这种情况下可能更好:

试试这个:


它不起作用的原因是您返回到
每个
函数。因此,设置一个在迭代之外赋值的变量将获得所需的数据。

您的返回值位于每个
使用的匿名函数中。因此
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;
}

您需要在
每个
之外返回,并使用
返回
提前退出
每个
迭代:

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;
    }

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

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

@Greg-J不用担心。我确实有过这样的时刻,答案就在我面前。有趣的是,在此之前我在jQuery中从未见过这个函数。回答得好。
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;
}
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;
    }
function getCountryData(data, country) {
    var matchingCountries = $.grep(data, function(row){
        return row.Country == country;
    });
    if (matchingCountries.length > 0)
        return matchingCountries[0].data;
}