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
相关产品推荐
相关产品推荐

