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

按transactionHash分组数组对象遇异常,reduce实现问题求助

数组对象分组问题解决方案

问题分析

你当前的reduce分组代码存在两个核心问题,导致最后一个对象无法正确分组:

  1. 未传入reduce的初始累加器:当reduce不提供第二个参数时,第一次迭代的curr是数组的第一个元素(而非空对象),这会破坏整个分组逻辑的结构,前面的分组正确只是巧合,后续元素(尤其是最后一个)会因为累加器类型混乱而失败。
  2. 返回结果格式不符预期:你的代码返回的是键为transactionHash的对象,而你需要的是子数组组成的数组,需要额外提取对象的值。

修正后的代码

const key = 'transactionHash';
// 第一步:用reduce按transactionHash分组,必须传入空对象作为初始值
const groupedMap = yourData.reduce((acc, item) => {
  // 获取当前item的transactionHash
  const hash = item[key];
  // 初始化对应hash的数组(如果不存在),然后push当前item
  acc[hash] = acc[hash] || [];
  acc[hash].push(item);
  return acc;
}, {});
// 第二步:将分组后的对象转换为你需要的数组格式
const groupedResult = Object.values(groupedMap);
return groupedResult;

边界情况优化(可选)

如果你的数据中存在transactionHash为null或undefined的对象,可以添加判断跳过这类数据,避免无效分组:

const key = 'transactionHash';
const groupedMap = yourData.reduce((acc, item) => {
  const hash = item[key];
  // 跳过hash为空的对象
  if (hash == null) return acc;
  acc[hash] = acc[hash] || [];
  acc[hash].push(item);
  return acc;
}, {});
const groupedResult = Object.values(groupedMap);
return groupedResult;

验证示例

假设原始数据为:

const yourData = [
  { otherData: 'tx1-1', transactionHash: 1 },
  { otherData: 'tx1-2', transactionHash: 1 },
  { otherData: 'tx2-1', transactionHash: 2 },
  { otherData: 'tx2-2', transactionHash: 2 },
];

修正后的代码会输出:

[
  [{ otherData: 'tx1-1', transactionHash: 1 }, { otherData: 'tx1-2', transactionHash: 1 }],
  [{ otherData: 'tx2-1', transactionHash: 2 }, { otherData: 'tx2-2', transactionHash: 2 }]
]

完全符合你的期望格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:01:08