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

