如何用 D3 对数组求和?

Lag*_*and 1 javascript arrays d3.js

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

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

{Region:'' ,freq:{yesVote:0, noVote:0}}
Run Code Online (Sandbox Code Playgroud)

我试着这样总结:

    // 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];
    });
Run Code Online (Sandbox Code Playgroud)

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

编辑

打印数据:

在此处输入图片说明

Arc*_*oog 5

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

{Region:'' ,freq:{yesVote:0, noVote:0}}
Run Code Online (Sandbox Code Playgroud)

那么是的,您没有传递正确的数据。您只传递具有单个值集的对象。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
Run Code Online (Sandbox Code Playgroud)

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