如何在现有数组中为无工时记录的年份添加‘0 min’
自动补全年份缺失工时的实现方案
你的手动splice硬编码索引的方式太脆弱,只要数组内容或顺序变动就会失效,下面是动态遍历的通用解决方案:
核心思路是倒序遍历数组(避免插入元素打乱后续遍历的索引),判断每个元素是否为年份(即不包含"min"的字符串),如果当前年份的下一个元素不是工时记录(或者当前是数组最后一个元素),就插入"0 min"。
实现代码:
const processMinutes = [ '1990', '180min', '1991', '135 min', '1992', '126 min', '1993', '1994', '182 min', '1995', '1996', '118 min', '1997', '1998', '136min', '199', '144 min', '2000' ]; // 倒序遍历数组,防止插入元素影响后续索引位置 for (let i = processMinutes.length - 1; i >= 0; i--) { const currentItem = processMinutes[i]; // 判断当前项是否是年份:不含"min"关键字 if (!currentItem.includes('min')) { const nextItem = processMinutes[i + 1]; // 下一项不存在,或者下一项不是工时记录(不含min),则插入0 min if (!nextItem || !nextItem.includes('min')) { processMinutes.splice(i + 1, 0, '0 min'); } } } console.log(processMinutes);
为什么用倒序遍历?
如果正序遍历数组,当你在某个位置插入元素后,后续所有元素的索引都会+1,导致遍历逻辑混乱(比如重复处理或跳过元素)。倒序遍历则不会有这个问题,因为我们处理的是数组末尾的元素,前面的插入操作不会影响已经遍历过的位置。
效果验证
运行上述代码后,输出结果完全符合你的期望:
[ '1990', '180min', '1991', '135 min', '1992', '126 min', '1993', '0 min', '1994', '182 min', '1995', '0 min', '1996', '118 min', '1997', '0 min', '1998', '136min', '199', '144 min', '2000', '0 min' ]
内容的提问来源于stack exchange,提问作者Ivan Albert
相关产品推荐
相关产品推荐

