首页 > 解决方案 > 如何将 JavaScript 对象传递给另一个函数?

问题描述

我正在从 AWS S3 存储桶下载 csv 文件,以便可以在 D3 中使用它。

下载csv文件没问题。在下面的代码中,console.log(data.Body.toString())以预期格式打印出 csv 文件内容

但是,我不确定如何在下面的代码中将下载的 csv 文件内容传递给 D3。

文件内容已经是不错的 csv 文件格式。

问题:如何merged.csv用对象替换下面mergedcsv

<script type="text/javascript">

var bucket = new AWS.S3();

bucket.getObject({
    Bucket: 's3-google-analytics', 
    Key: 'merged.csv'
}, 
    function awsDataFile(error, data) {
        if (error) {
            return console.log(error);
        }
        mergedcsv = data.Body.toString();
        console.log(data.Body.toString());
    }
);

// how to replace the "merged.csv" below with the mergedcsv object above?

d3.csv("merged.csv", function(data) {
    var parseDate = d3.time.format("%Y%m%d").parse;
    var counter = 0;
    data.forEach(function(d) {
        etc
    });
});

</script>

更新以添加mergedcsv内容示例,例如console.log(mergedcsv);or的输出console.log(data.Body.toString());

yyyymm,date,hostname,source,PPCC,in30days,sessionDuration,users,sessions,newUsers,twitterSessions,bounceRate,sessionsPerUser
201203,20120330,journal,google,PPCC,>30days,26.25,4,4,4,0,75.0,1.0
201203,20120331,journal,(direct),PPCC,>30days,0.0,3,3,3,0,100.0,1.0
201203,20120331,journal,bing,PPCC,>30days,0.0,1,1,1,0,100.0,1.0

标签: javascriptd3.js

解决方案


在阅读 d3.csv 上的文档后,它会从 URL 加载一个 CSV 文件,但在您的示例中,您已经加载了数据,您只需要解析它。所以 d3.csv 不会有任何用处。

看起来用于解析的 D3 函数d3.csv.parse(data)将返回一个已解析数据的数组。(文档在这里

所以你可以做类似的事情......</p>

var bucket = new AWS.S3();
var mergedcsv;

bucket.getObject({
    Bucket: 's3-google-analytics', 
    Key: 'merged.csv'
}, 
    function awsDataFile(error, data) {
        if (error) {
            return console.log(error);
        }
        mergedcsv = d3.csv.parse(data.Body.toString()); 

        // now mergedcsv will be an array, so you can do whatever you were going to do with it before, i.e...
        var parseDate = d3.time.format("%Y%m%d").parse;
        var counter = 0;
        data.forEach(function(d) {
           etc
        });
    }
);


推荐阅读