for循环中if-else统计国家数量异常:印英计数为0的问题排查
问题根源分析与解决方案
你的问题出在循环内的变量赋值逻辑上,咱们一步步拆解清楚:
核心问题
你当前的代码逻辑是:每次循环时,不管当前数组项是不是目标国家,都会给india、uk这类变量强制赋值——匹配就设为当前的country_count,不匹配直接设为0。这就导致了一个致命问题:
- 只有当数组最后一个元素是目标国家时,变量才能保留正确的计数;
- 如果最后一个元素不是目标国家,前面循环中好不容易得到的正确值会被最后一次的
0直接覆盖。
加拿大计数正常,大概率是因为它刚好是数组的最后一项~
修正后的代码逻辑
正确的做法是:先在循环外初始化变量为0,循环内只在匹配到对应国家时更新变量,不匹配时不做重置操作,彻底避免覆盖问题:
// 先在循环外初始化计数变量,避免每次循环被强制重置 let india = 0; let uk = 0; let canada = 0; const fLen = jArray.length; for (let i = 0; i < fLen; i++) { const currentItem = jArray[i]; if (currentItem['territory'] === 'India') { // 如果同一个国家可能出现多次需要累加,就改成 india += currentItem['country_count'] india = currentItem['country_count']; } else if (currentItem['territory'] === 'United Kingdom') { uk = currentItem['country_count']; } else if (currentItem['territory'] === 'Canada') { canada = currentItem['country_count']; } } console.log('印度计数:', india, '英国计数:', uk, '加拿大计数:', canada);
额外提示
如果你的数组中同一个国家可能存在多条数据(需要累加总计数),就把赋值语句改成累加形式(+=);如果每个国家只出现一次,直接赋值即可。另外,用let代替var能避免变量提升带来的潜在问题,代码更规范。
内容的提问来源于stack exchange,提问作者Hardik Patel
相关产品推荐
相关产品推荐

