如何简化Node.js中判断用户资料完整性的大量if-else代码?
简化用户资料完整性检查逻辑
我正在基于Node.js和MySQL开发项目,需要实现用户资料完整性判断逻辑,需检查28个字段是否为空,目前编写了28个if-else语句来实现该功能,代码功能正常但过于冗长,希望能够简化代码。以下是我的实现代码:
let points = 0; let point1 = 0; let point2 = 0; let point3 = 0; let point4 = 0; let point5 = 0; let point6 = 0; let point7 = 0; let point8 = 0; let point9 = 0; let point10 = 0; let point11 = 0; let point12 = 0; let point13 = 0; let point14 = 0; let point15 = 0; let point16 = 0; let point17 = 0; let point18 = 0; let point19 = 0; let point20 = 0; let point21 = 0; let point22 = 0; let point23 = 0; let point24 = 0; let point25 = 0; let point26 = 0; if (profileRes[0].username == null || profileRes[0].username == "") { point1 = points + 10; } else if (profileRes[0].username != null || profileRes[0].username != "") { point1 = points += 0; } if (profileRes[0].phone == null || profileRes[0].phone == "") { point2 = points + 10; } else if (profileRes[0].phone != null || profileRes[0].phone != "") { point2 = points += 0; } if (profileRes[0].email == null || profileRes[0].email == "") { point3 = points + 10; } else if (profileRes[0].email != null || profileRes[0].email != "") { point3 = points += 0; } if (profileRes[0].company_name == null || profileRes[0].company_name == "") { point4 = points + 10; } else if (profileRes[0].company_name != null || profileRes[0].company_name != "") { point4 = points += 0; } if (profileRes[0].profile_description == null || profileRes[0].profile_description == "") { point5 = points + 10; } else if (profileRes[0].profile_description != null || profileRes[0].profile_description != "") { point5 = points += 0; } if (profileRes[0].short_description == null || profileRes[0].short_description == "") { point6 = points + 10; } else if (profileRes[0].short_description != null || profileRes[0].short_description != "") { point6 = points += 0; } if (profileRes[0].company_url == null || profileRes[0].company_url == "") { point7 = points + 10; } else if (profileRes[0].company_url != null || profileRes[0].company_url != "") { point7 = points += 0; } if (profileRes[0].company_linkedin == null || profileRes[0].company_linkedin == "") { point8 = points + 10; } else if (profileRes[0].company_linkedin != null || profileRes[0].company_linkedin != "") { point8 = points += 0; } if (profileRes[0].company_instagram == null || profileRes[0].company_instagram == "") { point9 = points + 10; } else if (profileRes[0].company_instagram != null || profileRes[0].company_instagram != "") { point9 = points += 0; } if (profileRes[0].company_facebook == null || profileRes[0].company_facebook == "") { point10 = points + 10; } else if (profileRes[0].company_facebook != null || profileRes[0].company_facebook != "") { point10 = points += 0; } if (profileRes[0].number_of_employees == null || profileRes[0].number_of_employees == "") { point11 = points + 10; } else if (profileRes[0].number_of_employees != null || profileRes[0].number_of_employees != "") { point11 = points += 0; } if (profileRes[0].company_logo == null || profileRes[0].company_logo == "") { point12 = points + 10; } else if (profileRes[0].company_logo != null || profileRes[0].company_logo != "") { point12 = points += 0; } if (profileRes[0].founding_year == null || profileRes[0].founding_year == "") { point13 = points + 10; } else if (profileRes[0].founding_year != null || profileRes[0].founding_year != "") { point13 = points += 0; } if (profileRes[0].is_profile_published == null || profileRes[0].is_profile_published == "") { point14 = points + 10; } else if (profileRes[0].is_profile_published != null || profileRes[0].is_profile_published != "") { point14 = points += 0; } if (profileRes[0].legal_name == null || profileRes[0].legal_name == "") { point15 = points + 10; } else if (profileRes[0].legal_name != null || profileRes[0].legal_name != "") { point15 = points += 0; } if (profileRes[0].billing_address == null || profileRes[0].billing_address == "") { point16 = points + 10; } else if (profileRes[0].billing_address != null || profileRes[0].billing_address != "") { point16 = points += 0; } if (profileRes[0].zip_code == null || profileRes[0].zip_code == "") { point17 = points + 10; } else if (profileRes[0].zip_code != null || profileRes[0].zip_code != "") { point17 = points += 0; } if (profileRes[0].vat_number == null || profileRes[0].vat_number == "") { point18 = points + 10; } else if (profileRes[0].vat_number != null || profileRes[0].vat_number != "") { point18 = points += 0; } if (profileRes[0].sdi_codex == null || profileRes[0].sdi_codex == "") { point19 = points + 10; } else if (profileRes[0].sdi_codex != null || profileRes[0].sdi_codex != "") { point19 = points += 0; } if (profileRes[0].benefits == null || profileRes[0].benefits == "") { point20 = points + 10; } else if (profileRes[0].benefits != null || profileRes[0].benefits != "") { point20 = points += 0; } if (profileRes[0].category == null || profileRes[0].category == "") { point21 = points + 10; } else if (profileRes[0].category != null || profileRes[0].category != "") { point21 = points += 0; } if (profileRes[0].branch == null || profileRes[0].branch == "") { point22 = points + 10; } else if (profileRes[0].branch != null || profileRes[0].branch != "") { point22 = points += 0; } if (profileRes[0].coreActivities == null || profileRes[0].coreActivities == "") { point23 = points + 10; } else if (profileRes[0].coreActivities != null || profileRes[0].coreActivities != "") { point23 = points += 0; } if (profileRes[0].districts == null || profileRes[0].districts == "") { point24 = points + 10; } else if (profileRes[0].districts != null || profileRes[0].districts != "") { point24 = points += 0; } if (profileRes[0].legalFormCompany == null || profileRes[0].legalFormCompany == "") { point25 = points + 10; } else if (profileRes[0].legalFormCompany != null || profileRes[0].legalFormCompany != "") { point25 = points += 0; } if (profileRes[0].commune == null || profileRes[0].commune == "") { point26 = points + 10; } else if (profileRes[0].commune != null || profileRes[0].commune != "") { point26 = points += 0; } else { } let pint = point1 + point2 + point3 + point4 + point5 + point6 + point7 + point8 + point9 + point10 +point11 + point12 + point13 + point14 + point15 + point16 + point17 + point18 + point19 + point20 + point21 + point22 + point23 + point24 + point25 + point26; let percentage = (pint * 100) / 260;
简化方案
核心思路是将需要检查的字段名存入数组,通过遍历数组统一处理每个字段的空值判断,避免重复代码:
// 定义需要检查的所有字段名,补充剩余2个字段即可 const profileFields = [ 'username', 'phone', 'email', 'company_name', 'profile_description', 'short_description', 'company_url', 'company_linkedin', 'company_instagram', 'company_facebook', 'number_of_employees', 'company_logo', 'founding_year', 'is_profile_published', 'legal_name', 'billing_address', 'zip_code', 'vat_number', 'sdi_codex', 'benefits', 'category', 'branch', 'coreActivities', 'districts', 'legalFormCompany', 'commune' ]; const profile = profileRes[0]; let totalPoints = 0; // 遍历字段数组,检查每个字段是否为空 profileFields.forEach(field => { const value = profile[field]; // 判断值是否为null或空字符串 if (value === null || value === '') { totalPoints += 10; } }); // 计算完整性百分比,自动适配字段数量 const percentage = (totalPoints * 100) / (profileFields.length * 10);
简化优势
- 代码简洁:去掉大量重复的if-else和冗余变量,行数大幅减少
- 易维护:新增/删除检查字段只需修改
profileFields数组,无需改动逻辑代码 - 逻辑严谨:修复原代码中else条件的逻辑错误(原代码
!= null || != ""永远为true,属于无效判断) - 扩展性强:若后续需调整单个字段分值,可将数组改为对象数组(如
[{field: 'username', score:10}, ...]),灵活适配不同规则
内容的提问来源于stack exchange,提问作者jaga b
相关产品推荐
相关产品推荐

