JavaScript中如何基于start和end年份范围逐年生成对象填充数组
按年份区间展开对象数组的JS实现
核心逻辑
- 外层循环遍历原数组的每一个待处理对象
- 内层循环以当前对象的
start字段为初始值、end字段为终止值(包含首尾年份),逐个生成区间内的年份 - 每生成一个年份,就将原对象的所有属性与该年份合并为新对象,推入最终结果数组
纯for循环实现(适配遍历思路)
// 原始输入数组 const sourceArr = [ {value: "a", start: 1950, end: 1954, description: "aaa"}, {value: "b", start: 1953, end: 1956, description: "bbb"}, {value: "c", start: 1960, end: 1962, description: "ccc"} ]; const result = []; // 遍历原数组的每一个条目 for (let i = 0; i < sourceArr.length; i++) { const currentItem = sourceArr[i]; // 遍历当前条目覆盖的所有年份,直接用当前条目自带的start/end控制循环范围 for (let year = currentItem.start; year <= currentItem.end; year++) { // 合并原属性与当前年份,生成新对象推入结果 result.push({ ...currentItem, year: year }); } }
简洁ES6实现(无需嵌套循环)
如果项目支持ES6+语法,可以用flatMap简化写法,逻辑和上面完全一致:
const result = sourceArr.flatMap(item => { // 生成当前条目start到end的所有年份数组 const yearRange = Array.from( { length: item.end - item.start + 1 }, (_, idx) => item.start + idx ); // 每个年份映射为带year字段的对象,flatMap自动拼接所有子数组 return yearRange.map(year => ({ ...item, year })); });
内容的提问来源于stack exchange,提问作者console.log
相关产品推荐
相关产品推荐

