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

如何编写可复用JS函数将对象数组转换为ApexCharts适配格式

你可以把需要提取的字段作为入参传入函数,即可实现通用复用,同时还兼容自定义显示名称的需求,顺便也修复了你原有实现中map遍历返回值冗余的问题。

基础通用实现

/**
 * 通用转换ApexCharts series格式函数
 * @param {Array} data 原始对象数组
 * @param {Array} extractKeys 需要提取的字段名数组
 * @returns {Array} 适配ApexCharts的series数组
 */
export const setupGraphSeries = (data, extractKeys) => {
  // 初始化结果数组
  const series = extractKeys.map(key => ({
    // 字段名首字母大写,和你原有输出格式对齐
    name: key.charAt(0).toUpperCase() + key.slice(1),
    data: []
  }))

  // 遍历原始数据填充数值
  data.forEach(item => {
    extractKeys.forEach((key, index) => {
      // 仅当字段存在时才写入,避免undefined污染数据
      if (item.hasOwnProperty(key)) {
        series[index].data.push(item[key])
      }
    })
  })

  return series
}

调用示例

针对你当前的场景,直接传入对应字段数组即可:

const result = setupGraphSeries(pressure, ['sistolica', 'diastolica', 'pulsazione'])

返回结果和你需要的目标格式完全一致。


进阶灵活版本(支持自定义显示名称)

如果需要series的name和原字段名解耦(比如显示中文名称),可以用支持配置项的版本:

export const setupGraphSeries = (data, keyConfig) => {
  const series = keyConfig.map(config => ({
    name: typeof config === 'string' 
      ? config.charAt(0).toUpperCase() + config.slice(1)
      : config.name,
    data: []
  }))

  data.forEach(item => {
    keyConfig.forEach((config, index) => {
      const key = typeof config === 'string' ? config : config.key
      if (item.hasOwnProperty(key)) {
        series[index].data.push(item[key])
      }
    })
  })

  return series
}

该版本支持两种传入格式:

  • 字符串数组格式,用法和基础版一致
  • 配置对象数组格式,可自定义显示名称:
const result = setupGraphSeries(pressure, [
  {key: 'sistolica', name: '收缩压'},
  {key: 'diastolica', name: '舒张压'},
  {key: 'pulsazione', name: '脉搏'}
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:45:04