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

JavaScript遍历嵌套持仓JSON数组 按证券类型汇总净值生成饼图数据

嵌套投资组合JSON的证券类型净值统计实现方案

核心遍历与计算逻辑

  • 两层循环覆盖完整结构:第一层遍历portfolio_accounts数组下的所有投资账户,第二层进入每个账户的holdings字段遍历单条持仓记录
  • 单持仓净值计算:严格按照规则执行单持仓净值计算,公式为净值 = 持仓price * 持有shares,无额外复杂运算
  • 分类累计逻辑:动态维护以security_type为键的统计对象,首次遇到某类证券时初始化对应累计值,后续同类型持仓直接将净值累加到对应键值下
  • 零扩展成本:不需要提前在代码中枚举所有可能的证券类型,后续新增任意类型(如加密货币Crypto、公募基金Fund)时,逻辑会自动识别新的类型值并纳入统计,无需修改原有代码

饼图自动适配实现

  • 动态颜色分配:提前准备一套独立的预设色板数组,每识别到一个新的证券类型,按索引顺序从色板中取色绑定到该类型,色板长度超过时自动循环取色,不会出现颜色缺失问题
  • 数据格式兼容:统计完成后直接输出包含「类型名称、累计净值、绑定颜色」的结构化数组,可直接传入主流饼图组件,组件会根据净值自动计算占比生成对应区块

示例数据计算校验

基于提供的参考JSON结构,按照规则计算的结果为:

  • 股票(Stock)类累计净值:1000.50 * 20 = $20010
  • 债券(Bond)类累计净值:(100.99 * 4) + (530.50 * 2) = $1464.96
  • 组合整体总净值:$21474.96
  • 对应占比:股票类约93.2%,债券类约6.8%

核心逻辑代码参考

// 初始化统计容器与预设色板
const securityTypeStats = {};
const colorPalette = ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4'];
let colorAssignIndex = 0;

// 第一层循环:遍历所有投资账户
portfolioData.portfolio_accounts.forEach(account => {
  // 第二层循环:遍历账户下的所有持仓
  account.holdings.forEach(holding => {
    // 计算单持仓净值
    const currentHoldingValue = holding.price * holding.shares;
    // 识别未统计过的新证券类型,自动初始化、分配颜色
    if (!securityTypeStats[holding.security_type]) {
      securityTypeStats[holding.security_type] = {
        totalNetValue: 0,
        bindColor: colorPalette[colorAssignIndex % colorPalette.length]
      }
      colorAssignIndex += 1;
    }
    // 同类资产净值累加
    securityTypeStats[holding.security_type].totalNetValue += currentHoldingValue;
  })
})

// 转换为饼图组件可直接消费的格式
const pieRenderData = Object.entries(securityTypeStats).map(([typeName, config]) => ({
  name: typeName,
  value: config.totalNetValue,
  itemStyle: { color: config.bindColor }
}))

代码无硬编码的证券类型判断分支,任意新增的证券类型都会被自动识别、分配颜色、纳入占比计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 06:54:08