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

解决TypeError: Cannot read property 'category' of undefined及数组分组问题

问题分析与修复方案

原代码报错原因

你写的pre.cur.category是错误写法:pre是reduce的累加器对象,cur是当前遍历的数组元素,pre里根本没有cur这个属性,所以访问pre.cur.category必然抛出Cannot read property 'category' of undefined。另外原代码还遗漏了turnover字段的处理,也没按期望转换属性名的大小写。

简洁实现方案

用Array.reduce就能高效完成分组和属性转换,代码逻辑清晰:

const a = [
  {id: "2197",name: "AC",currency: "EUR",category: "Equity",illiquidYears: 1.0,turnover: 0.15},
  {id: "2194",name: "Japanese",currency: "EUR",category: "Equity",illiquidYears: 1.0,turnover: 0.15},
  {id: "2221237",name: "Global Credit",currency: "EUR",category: "FixedIncome",illiquidYears: 1.0,turnover: 0.15},
  {id: "7123928",name: "Duration Bonds",currency: "EUR",category: "FixedIncome",illiquidYears: 1.0,turnover: 0.15},
  {id: "1151230",name: "Euro Cash",currency: "EUR",category: "FixedIncome",illiquidYears: 1.0,turnover: 0.15},
  {id: "1151230",name: "Euro Cash",currency: "EUR",category: "Alternatives",illiquidYears: 1.0,turnover: 0.15},
  {id: "`231150",name: "Euro Cash",currency: "EUR",category: "Alternatives",illiquidYears: 1.0,turnover: 0.15},
  {id: "11`21350",name: "Euro Cash",currency: "EUR",category: "Others",illiquidYears: 1.0,turnover: 0.15}
];

const trans = (arr) => {
  return arr.reduce((acc, item) => {
    const category = item.category;
    // 转换为期望的属性格式
    const formattedItem = {
      Name: item.name,
      IlliquidYears: item.illiquidYears,
      Turnover: item.turnover
    };
    // 初始化分类数组(如果不存在)
    acc[category] = acc[category] || [];
    acc[category].push(formattedItem);
    return acc;
  }, {});
};

const b = trans(a);
console.log(b);

代码说明

  • 核心用reduce遍历数组,acc作为容器存储分组后的结果
  • 对每个元素,提取category作为分组键,同时把属性名转换为大写开头的格式
  • 用acc[category] = acc[category] || []简化数组初始化逻辑,避免冗余的if判断
  • 最后把转换好的元素推入对应分类的数组,返回最终结果

这个实现完全符合你的期望输出,同时解决了原代码的报错问题,代码简洁易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:50:56