在map方法内使用reduce报错'reduce is not a function'如何解决
报错原因
- 你在
map回调中对date调用reduce方法,而map遍历每个数组项时拿到的date是字符串类型,字符串原型没有reduce方法,因此触发该报错。 - 回调中使用
amount[i]取值逻辑错误,map遍历每个项时拿到的amount是当前项的单个数值,不是全量的金额数组,无法通过索引取到其他项的金额。 - 整体逻辑结构错误:
map用于对数组每一项做一对一转换,返回长度相同的新数组,而你需要的是对全数组做分组聚合,不需要套map层,直接对原数组调用reduce即可。
正确实现代码
你需要的按日期合并金额的功能可以直接通过reduce遍历原数组完成,示例如下:
// 第一步:用reduce完成按日期分组求和,结果存在Map中 const groupedMap = dividendArrayFiltered.reduce((acc, currentItem) => { const { date, amount } = currentItem acc.set(date, (acc.get(date) ?? 0) + amount) return acc }, new Map()) // 第二步:按需转换格式 // 方案1:输出和原数组结构一致的对象数组(推荐,后续处理更方便) const summedDividend = Array.from(groupedMap, ([date, amount]) => ({ date, amount })) // 方案2:输出你原代码中想要的date、amount分别为数组的结构 // const summedDividend = { // date: [...groupedMap.keys()], // amount: [...groupedMap.values()] // }
输出结果示例(方案1)
[ { date: '2021-11-09', amount: 0.5 }, { date: '2021-11-08', amount: 1 }, { date: '2021-11-11', amount: 2 } ]
内容的提问来源于stack exchange,提问作者fernon
相关产品推荐
相关产品推荐

