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

最新版D3调用d3.values()报错非函数如何计算属性最值

报错原因
  • 你使用的最新版D3(v7及以上版本)已经将d3.values从核心API中移除,该方法原本属于d3-collection模块,新版本不再默认挂载到d3全局对象,调用时自然会报“values不是函数”的错误。
  • 即便是在支持d3.values的旧版本D3中,该方法也只接收1个待转换的对象参数,不支持传入第二个映射回调,你原来的写法传参逻辑本身也有问题。
正确实现方案

不需要额外引入废弃的d3-collection模块,直接用JS原生Object.values()替代d3.values完成对象到数组的转换即可。另外d3.min/d3.max本身就支持第二个参数作为值访问器,不需要提前对数组做映射处理。
针对你给出的示例数据,计算Property1最小、最大值的代码如下:

const data =
{
 "Item1":{
   "Property1": "11",
   "Property2": "12",
 },
 "Item2":{
   "Property1": "21",
   "Property2": "22",
 }
}

// 计算Property1最小值,原属性是字符串格式,用+转成数值
const minVal = d3.min(Object.values(data), d => +d.Property1)
// 计算Property1最大值
const maxVal = d3.max(Object.values(data), d => +d.Property1)

console.log(minVal, maxVal) // 运行结果:11 21

说明:Object.values(data)会返回所有一级子对象组成的数组,效果和旧版d3.values(data)完全一致,是ES2017标准的原生API,完全可以满足常规场景的使用需求。
如果需要计算Property2的极值,只需要把访问器函数里的属性名替换成Property2即可。

内容的提问来源于stack exchange,提问作者marco trevi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 17:42:42