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

JS提取对象数组/嵌套对象指定key值及D3适配数据格式选择

嵌套对象提取指定字段方法

你只需要先把嵌套对象的属性值转为数组,就可以复用你现有的getValue逻辑:

// 提取obj的所有属性值,得到的结构和你之前的对象数组arr完全一致
const objValues = Object.values(obj)
// 复用原有方法提取去重日期
dates = new Set(getValue(objValues, "date"))

如果要手动实现提取所有date和score的组合数组,无需依赖通用getValue方法也可以这么写:

const allRecords = []
Object.values(obj).forEach(item => {
  item.details.forEach(detail => {
    detail.values.forEach(v => {
      allRecords.push({date: v.date, score: v.score})
    })
  })
})
// 去重日期直接从结果集提取即可
const uniqueDates = [...new Set(allRecords.map(item => item.date))]
数据格式选择建议
  • 优先选择对象数组格式:D3.js的绝大多数数据处理、图表渲染API都以数组作为标准输入,原生数组的map、filter、reduce、sort等方法也更适配批量数据清洗、聚合分析的需求,开发效率更高。
  • 如果你存在高频按name快速查询数据的需求,可以在需要时临时将对象数组转为嵌套对象即可,无需全局使用嵌套对象格式,转换代码参考:
const nameMap = Object.fromEntries(arr.map(item => [item.name, item]))
// 之后可以直接通过nameMap["string 1"]快速获取对应数据
  • 嵌套对象仅适合按固定键高频查询的场景,对于图表开发来说,折线图、柱状图等需要遍历序列的场景都需要额外把对象转数组,反而会增加冗余操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:39:04