【问题标题】:Using D3 to read data into associative arrays使用 D3 将数据读入关联数组
【发布时间】:2011-12-05 07:27:19
【问题描述】:

我正在尝试遍历一组值并将单独的文件(使用 d3.js)读入 javascript 关联数组,但参数未正确传递到内部函数中。例如:

var reg_list = [];
var all_region_data = [];
reg_list[0]="region1";
reg_list[1]="region2";

// Function to read in data from all regions in reg_list. 
function read_regional_data(region_list) {
    for (i=0;i<reg_list.length;i++) {
        region = region_list[i];
        console.log("Read data for " + region) // THIS RETURNS REGION1, THEN              
            // REGION2
        all_region_data[region]=new Array()
        d3.csv('filepath' + region + '.csv', function(csv){
                    console.log('reading for ' + region) // THIS RETURNS REGION2 TWICE
            csv.map(function(x) {
                all_region_data[region].push(x.cause);
            })
        console.log("Finished Reading Data for " + region)
        })
    }
}

执行此操作时,我会遍历循环中的两个区域,但 region1 从未传递到 d3.csv 函数中。这可能与异步运行的 d3.csv 有关吗?任何关于如何避免或改善这种情况的想法都值得赞赏。

【问题讨论】:

    标签: javascript csv associative-array d3.js


    【解决方案1】:

    使用递归而不是循环来遍历区域 --

    var reg_list = [],
        all_region_data = [];
    reg_list[0]="region1";
    reg_list[1]="region2";
    
    function read_regional_data(i) {
        var region = reg_list[i];
        console.log("Read data for " + region);
        all_region_data[region]=new Array();
        d3.csv('filepath' + region + '.csv', function(csv){
            console.log('reading for ' + region);
            csv.map(function(x) {
                all_region_data[region].push(x.cause);
            });
            console.log("Finished Reading Data for " + region);
            if(i < reg_list.length) {
                read_regional_data(i+1);
            }
        });
    }
    read_regional_data(0);
    

    【讨论】:

      猜你喜欢
      • 2012-03-24
      • 1970-01-01
      • 2014-10-04
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2012-12-27
      • 1970-01-01
      相关资源
      最近更新 更多