You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何简化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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 00:04:03