私は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)
}
});