You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

D3.js中使用rollup同时处理字符串与数值的技术问题

解决D3.js中d3.nest rollup处理数值与特殊字符串的问题

首先得说你之前的代码问题出在哪:你在rollup函数里错误地引用了全局的dataTotal.Waarde,而不是当前分组里的单个元素,这直接导致你的类型判断完全失效,所以才会返回undefined。另外你的逻辑也没覆盖全场景——既没处理混合数值和"."的情况,也没在全是"."的分支里返回对应的字符串。

根据你的需求,我们需要实现这样的rollup逻辑:如果当前分组里的所有Waarde都是字符串".",就返回".";如果分组里存在数值,就把所有数值求和(忽略".")。下面是修正后的代码:

nested_data = d3.nest()
  .key(function(d) { return d.SITC; })
  .rollup(function(d) {
    // 检查当前分组的所有Waarde是否都是"."
    const allAreDot = d.every(function(e) { return e.Waarde === "."; });
    if (allAreDot) {
      return ".";
    }
    // 过滤掉".",对有效数值求和
    return d3.sum(d, function(e) {
      return typeof e.Waarde === "number" ? e.Waarde : 0;
    });
  })
  .entries(dataTotal);

来拆解下这段代码的逻辑:

  • 用d.every()遍历当前分组的每一项,确认是否所有Waarde都是".",如果是就直接返回字符串"."
  • 如果分组里有数值,就用d3.sum()处理:对每个元素判断,是数值就加入求和,是"."就转成0(不影响最终求和结果)
  • 这样就完美贴合你的需求:全是缺失值的分组保留".",有有效数据的分组返回正确的求和数值

内容的提问来源于stack exchange,提问作者Mart Fijten

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:04:54