forEach内使用if else统计年龄段人数出现重复插入及undefined问题
问题原因
1. travellerCount为undefined的原因
遍历拿到的a是年龄数组中的单个数值,数字类型不存在length属性,所以a.length取值自然为undefined。
2. 同年龄段重复插入的原因
你在遍历每个年龄时直接执行push操作,同一个年龄段匹配到多少个年龄就会插入多少条记录,不符合每个年龄段只存一条统计结果的需求。
解决方法
正确逻辑应该是先统计各年龄段总人数,再统一生成最终的统计数组,参考代码如下:
this.ages = [18, 20, 1]; // 先初始化计数对象,key为年龄段id,value为对应人数 const ageRangeCount = { 1: 0, // 0-1岁婴儿对应的id 3: 0 // 12-59岁成人对应的id }; // 第一步:遍历年龄数组统计各年龄段人数 this.ages.forEach(a => { if (a >= 0 && a <= 1) { ageRangeCount[1]++; } else if (a >= 12 && a <= 59) { ageRangeCount[3]++; } }); // 第二步:生成符合要求的统计数组,过滤掉人数为0的年龄段 this.travel.listOfTravellerCountPerAgeRange = Object.entries(ageRangeCount) .filter(([ageRangeId, count]) => count > 0) .map(([ageRangeId, count]) => ({ travellerAgeRangeId: Number(ageRangeId), travellerCount: count })); console.log(this.travel);
运行后输出的listOfTravellerCountPerAgeRange就是你期望的结果。
内容的提问来源于stack exchange,提问作者user16405978
相关产品推荐
相关产品推荐

