1

私はJavascriptに非常に慣れていないので、ご容赦ください。なぜこれがうまくいかないのかを理解しようとして、私は髪を引っ張っています。私はJavaのバックグラウンドを持っていることを覚えておいてください。関数「getCsvData」があり、基本的にCSVファイルを解析し、オブジェクトプロパティをデータソースオブジェクトに動的に追加してから返そうとしています。ご覧のとおり、関数「getCsvData」の外で、関数を呼び出した後に結果をログに記録しようとしましたが、結果オブジェクトは空で、オブジェクト プロパティが追加されていません。

私はまだ学び、理解しようとしているクロージャー/スコープチェーンの解決に起因する非常に強い感情を持っています.

問題は、プロパティがデータソース オブジェクトに動的に追加されないのはなぜですか? それらは実際には「$.get」の 2 番目の引数として渡された無名関数「function(data)」のスコープに追加されていると思いますが、外部関数「getCsvData」が戻るとすぐに削除されます。なぜ、どうすればこれを修正できますか? ありがとう!!

<script src="js/jquery-1.10.2.min.js"></script>
<script src="js/knockout-3.0.0.js"></script>
<script src="js/globalize.min.js"></script>
<script src="js/dx.chartjs.js"></script>
<script src="js/jquery.parse.js"></script>

$(function () {
    function getCsvData(fileName, groupBy, year) {
        var datasource = { }
        $.get(fileName, function(data) {
            var alldata = $.parse(data, { header: true });
            for (var i = 0; i<alldata.results.rows.length;i++) {
                var key = alldata.results.rows[i][groupBy]
                if (key in datasource) {
                    datasource[key] = datasource[key] + 1
                } else {
                    datasource[key] = 0
                }
             }
         });
        return datasource;
    };


    var results = getCsvData("data/data.csv", "Priority", 2012);
    console.log(results)
    for (key in results) {
        console.log(key)
    }
});
4

1 に答える 1