请耐心等待,我对 Javascript 很陌生。我正在拔头发,试图弄清楚为什么这不起作用。请记住,我来自 Java 背景。我有一个函数“getCsvData”,我实际上是在尝试解析 CSV 文件并将对象属性动态添加到数据源对象,然后返回它。如您所见,在函数“getCsvData”之外,我尝试在调用函数后记录结果,但结果对象是空的,并且没有添加任何对象属性。
我有一种非常强烈的感觉,这是由于我仍在努力学习和理解的闭包/范围链解决方案。
问题是:为什么不将属性动态添加到数据源对象中?我相信它们实际上是添加在作为“$.get”的第二个参数传递的匿名函数“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)
}
});