0

我有一个 dc.js 程序,当我为 dc 组提供单独的名称时,它运行良好

var group1 = dateDimension.group().reduceSum(function(d) { return d.dd; });
var group2 = dateDimension.group().reduceSum(function(d) { return d.count; });

但是当我这样做时

    var groups = {};
    var columns   = ["dd","count"];

    for (var i = 0; i < columns.length; ++i) {
        var col = columns[i]
        groups[col] = dateDimension.group().reduceSum(function(d) { return d[col]; });
    }

它只记住最后一列并用最后一个图表替换其他图表。

我应该如何解决这个问题

4

1 回答 1

1

这里的问题是 JavaScript 中一直出现的问题。您的变量“col”的作用域是该for循环所在的函数,因此它由传递给“reduceSum()”函数的两个匿名函数共享。

解决方案是插入另一个函数来提供列名的不同副本。(另外,你不应该用它for ... in来遍历数组。)

for (var i = 0; i < columns.length; ++i) {
  (function( columnName ) {
    group[ columnName ] = dateDimension.group().reduceSum(function(d) { return d[columnName]; });
  })( columns[i] );
}
于 2013-10-25T13:26:30.653 回答