【问题标题】:How can I sum an array with D3?如何将数组与 D3 相加?
【发布时间】:2018-03-30 17:41:06
【问题描述】:

我正在努力对数组求和。我没有任何错误,所以我不知道如何使它工作。

我传递给函数的数据如下所示:

{Region:'' ,freq:{yesVote:0, noVote:0}}

我试着这样总结:

    // compute pie slice angles
    var pie = d3.pie().sort(null).value(function (d) {
        var yesTotal;
        var noTotal;
        console.log(d);

        yesTotal = d3.sum(d, function(v){
            console.log(v.freq);
           return v.freq.yesVote;
        });

        noTotal = d3.sum(d, function(v){
           return v.freq.noVote;
        });

        console.log(yesTotal);
        console.log(noTotal);

        return [yesTotal,noTotal];
    });

Sum 函数返回 0 并且 sum 函数中的 log 函数没有出现在控制台中(首先正确记录打印数据)所以我认为传递给 sum 函数的数据有问题。你能解释一下我在哪里做错了吗?

编辑

打印数据:

【问题讨论】:

    标签: javascript arrays d3.js


    【解决方案1】:

    如果这是 console.log(d) 正在生产的:

    {Region:'' ,freq:{yesVote:0, noVote:0}}
    

    那么是的,您没有传递正确的数据。您只传递一个具有单个值集的对象。 d3.sum() 应该对完整的数据数组进行操作。示例:

    var data = [
      {Region: 'A' ,freq: {yesVote:1, noVote:10}},
      {Region: 'B' ,freq: {yesVote:2, noVote:11}},
      {Region: 'C' ,freq: {yesVote:3, noVote:12}}
    ];
    
    yesTotal = d3.sum(data, function(d) {
      return d.freq.yesVote;
    });
    
    noTotal = d3.sum(data, function(d) {
      return d.freq.noVote;
    });
    
    console.log(yesTotal)
    6
    console.log(noTotal)
    33
    

    尝试将总和移出饼图值函数,因为在内部,d 只是整个数据集中的一行。

    【讨论】:

    • 很抱歉我写的不清楚。数据被正确传递,所以即使只有一个值,它也应该返回它而不是 0 对吗?感谢您的建议,我会考虑如何在函数之外使用它。
    • 代码中console.log(d) 的结果是什么?从屏幕截图中可以看出它是一个单一的 JavaScript 对象,例如:{Region: 'North Region', freq: {yesVote: 212951, noVote: 546138}}
    • 我已将所有结果的图片添加到 EDIT 中
    • 酷,所以在我的例子中,如果我做了console.log(data)(相当于你的console.log(d)),我会看到包含所有数据区域的 whole 数组。您在控制台中看到所有记录的原因是 d3.pie().sort(null).value(function (d) {})循环遍历您的数组 类型的数据集。如果 d 对于 sum 函数是正确的,您会看到它为每个控制台输出一遍又一遍地打印所有数据点的整个数组,尽管您会一遍又一遍地错误地计算总和。尝试将 sum 函数传递给您的原始数据变量,因为它已传递给 d3.pie。
    • 感谢您的帮助。现在我在 pie 函数之前对所有相关数据求和,并传递一个带有是/否票的数组,而不是所有数据。它工作正常:) 再次感谢。
    猜你喜欢
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 2017-04-23
    • 2011-11-10
    • 1970-01-01
    相关资源
    最近更新 更多