按transactionHash分组数组对象遇异常,reduce实现问题求助
数组对象分组问题解决方案
问题分析
你当前的reduce分组代码存在两个核心问题,导致最后一个对象无法正确分组:
- 未传入reduce的初始累加器:当
reduce不提供第二个参数时,第一次迭代的curr是数组的第一个元素(而非空对象),这会破坏整个分组逻辑的结构,前面的分组正确只是巧合,后续元素(尤其是最后一个)会因为累加器类型混乱而失败。 - 返回结果格式不符预期:你的代码返回的是键为
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
相关产品推荐
相关产品推荐

