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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 09:36:10