如何按#Years列扩展数据为多行?求助reduce函数实现方法
解决方案
原始数据表格
| ID | Enroll Year | #Years |
|---|---|---|
| 23001 | 2022 | 1 |
| 23006 | 2022 | 1 |
| 23015 | 2022 | 1 |
| 23014 | 2021 | 2 |
| 23004 | 2020 | 3 |
目标结果表格
| ID | Enroll Year |
|---|---|
| 23001 | 2022 |
| 23006 | 2022 |
| 23015 | 2022 |
| 23014 | 2021 |
| 23014 | 2022 |
| 23004 | 2020 |
| 23004 | 2021 |
| 23004 | 2022 |
使用reduce实现的代码
// 原始数据数组 const originalData = [ { ID: '23001', EnrollYear: 2022, Years: 1 }, { ID: '23006', EnrollYear: 2022, Years: 1 }, { ID: '23015', EnrollYear: 2022, Years: 1 }, { ID: '23014', EnrollYear: 2021, Years: 2 }, { ID: '23004', EnrollYear: 2020, Years: 3 } ]; // 用reduce展开数据 const result = originalData.reduce((acc, item) => { // 根据#Years的值生成对应行数的条目 for (let i = 0; i < item.Years; i++) { acc.push({ ID: item.ID, EnrollYear: item.EnrollYear + i }); } return acc; }, []); console.log(result);
逻辑说明
- 初始化
reduce的累加器acc为空数组,用于存储最终结果。 - 遍历原始数据的每一项:
- 根据当前项的
Years值循环,生成对应数量的条目。 - 每一条目的
EnrollYear为原始入学年份加上循环索引i(从0开始,确保首行是原年份,后续逐行递增1)。 - 将生成的条目推入累加器数组。
- 根据当前项的
- 最终累加器数组即为目标格式的数据。
内容的提问来源于stack exchange,提问作者Rebecca Sacks
相关产品推荐
相关产品推荐

