嵌套forEach循环向数组push值时出现重复结果问题求解
问题根因
- 你在else if分支中嵌套了
childBirthDate数组的全量遍历逻辑,每次进入该分支都会遍历所有人员的出生日期,反复覆盖childEndDate变量的值,遍历结束后该变量只会保留数组最后一个元素(2010年出生的那条记录)的18年到期计算结果,所有符合else if条件的项推入数组的都是同一个值 - 外层遍历的
childbirthYear数组和childBirthDate数组是一一对应的关系,你的代码没有按索引关联两个数组的对应项,自然无法拿到对应人员的出生日期做计算
修复代码
this.childBirthDate.forEach((dateItem, index) => { const currentBirthYear = this.childbirthYear[index]; let childEndDate; if (periodEndYear - currentBirthYear < 18) { childEndDate = this.endDate; } else { childEndDate = addYears(new Date(dateItem), 18).toISOString(); } this.final.push(childEndDate); }); console.log(this.final);
修复说明
- 移除了else if分支中冗余的全量遍历逻辑,直接取当前遍历索引对应的出生日期计算,避免值被覆盖
- 将
childEndDate改为循环内的局部变量,避免全局变量复用导致的副作用 - 简化了判断逻辑,if分支已经覆盖小于18岁的场景,else分支自然对应大于等于18岁的场景,无需重复判断
内容的提问来源于stack exchange,提问作者user17205093
相关产品推荐
相关产品推荐

