【问题标题】:dc.js: dynamically multiple dimensionsdc.js:动态多维
【发布时间】:2026-02-01 11:50:02
【问题描述】:

我想创建与数组中的数据集一样多的维度。数据集数量是可变的。在我的示例中,我有 3 个,但它可以或多或少。

我的数据:

signalData: {
signal1: {
  name: "",
  data: {2,3,1,4,5,1,3},
},
signal2: {
  name: "",
  data: {2,3,1,4,5,1,3},
},
signal3: {
  name: "",
  data: {2,3,1,4,5,1,3},
},

我试过了:

var cf = crossfilter(flatData);

  var dimension = cf.dimension(dc.pluck("key"));
  var group = [];

  for (var signal in this.signalData) {
    dim = null;
    var dim = dimension.group().reduceSum(function (d) {
      return d[signal];
    });

    group.push(dim);
  }

但是所有3个渲染图表都只显示信号3的数据

【问题讨论】:

标签: d3.js dc.js crossfilter


【解决方案1】:

我为entry in the FAQ 添加了一个更简单的解决方案。

Array.forEach 通常是一个很好的解决方案,因为循环当前迭代的值将被捕获在一个不会改变的局部变量中:

  Object.keys(signalData).forEach(function(signal) {
    dim = null;
    var dim = dimension.group().reduceSum(function (d) {
      return d[signal];
    });

    group.push(dim);
  });

这里我们使用Object.keys() 获取字段名称数组,然后使用forEach 循环遍历该数组。

(出于这个原因,我很少使用 for 循环。)

【讨论】: