2

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"];
        }
    });
}
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

リターンは、によって使用される無名関数内にあり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使用する必要があります。returneach

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

$.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

あなたは本当にそれぞれを使うべきですか?結果を単一の回答にフィルタリングしようとしている場合は、

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 に答える