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

TypeScript实现动态对象统计:按key计数并归集对应dbId适配Chart.js

实现方案

问题修正点

  • 原代码错误将displayValue直接作为根层级的键,不符合期望的嵌套结构要求
  • 误用位运算符|做对象初始化,应该使用逻辑或/空值合并运算符做初始化判断
  • 缺少dbId归集逻辑,且没有正确提取attributeName作为一级统计键

正确实现代码

const obj = [
  {
    dbId: 26598,
    properties: [
      { attributeName: "BIM7AATypeCode" },
      { displayCategory: "Identity Data" },
      { displayName: "BIM7AATypeCode" },
      { displayValue: "221" },
    ],
  },
  {
    dbId: 26591,
    properties: [
      { attributeName: "BIM7AATypeCode" },
      { displayCategory: "Identity Data" },
      { displayName: "BIM7AATypeCode" },
      { displayValue: "221" },
    ],
  },
  {
    dbId: 3695,
    properties: [
      { attributeName: "abc" },
      { displayCategory: "Identity Data" },
      { displayName: "BIM7AATypeCode" },
      { displayValue: "123" },
    ],
  },
  {
    dbId: 3697,
    properties: [
      { attributeName: "abc" },
      { displayCategory: "Identity Data" },
      { displayName: "BIM7AATypeCode" },
      { displayValue: "123" },
    ],
  },
];

const histogram = {};

for (const item of obj) {
  // 将properties数组转换为键值对象,方便快速读取字段
  const props = Object.fromEntries(item.properties.map(p => Object.entries(p)[0]));
  const { attributeName, displayValue } = props;
  const currentDbId = item.dbId;

  // 初始化当前属性的统计结构
  if (!histogram[attributeName]) {
    histogram[attributeName] = {
      [displayValue]: 0,
      dbid: []
    };
  }

  // 累加统计次数
  histogram[attributeName][displayValue] += 1;
  // 归集对应dbId
  histogram[attributeName].dbid.push(currentDbId);
}

console.log(histogram);

输出结果

{
  BIM7AATypeCode: {
    "221": 2,
    dbid: [26598, 26591]
  },
  abc: {
    "123": 2,
    dbid: [3695, 3697]
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:54:02