如何验证输入值是否存在于JSON数组?分支代码唯一性校验实现
解决分支代码唯一性验证问题
你需要实现分支代码的唯一性校验,确保用户输入的代码在数组中不重复,同时能正确给对应索引的字段标记错误对吧?我来帮你梳理现有代码的问题,再给出更简洁可靠的实现方案。
现有代码的问题分析
当前的循环逻辑存在几个关键问题:
- count变量未重置:如果每次触发blur事件时没有把
count重置为0,会导致多次校验后count累加错误,判断结果完全不准 - 循环内实时更新错误状态:每次循环迭代都修改
exists的值,而不是等整个循环结束后根据最终的count结果来设置,逻辑顺序完全颠倒 - 未排除当前分支:用户编辑已有分支的代码时,会和自己原来的代码匹配,导致误判为重复
优化后的实现方案
我们可以用JavaScript数组的some()方法简化验证逻辑,这个方法会遍历数组,只要找到一项满足条件就返回true,非常适合做存在性检查,同时能解决上述所有问题。
修正后的代码
// 处理blur事件的函数,index为当前输入分支的索引 checkBranchCodeUniqueness(index) { // 获取当前输入的分支代码,同时去除首尾空格 const currentCode = this.company_details.branches[index].code?.trim(); // 空值直接标记为不存在重复(可根据业务需求调整这部分逻辑) if (!currentCode) { this.BranchCodeArray[index].exists = false; return; } // 检查数组中是否存在除当前分支外的重复代码 const isDuplicate = this.company_details.branches.some((branch, i) => { // 跳过当前正在编辑的分支,只对比其他分支的代码 return i !== index && branch.code?.trim() === currentCode; }); // 给对应索引的字段设置错误状态 this.BranchCodeArray[index].exists = isDuplicate; }
代码说明
- 空值处理:先判断输入代码是否为空,避免空字符串被误判为重复(如果业务允许空代码,可以直接去掉这部分)
- 排除当前分支:通过
i !== index跳过正在编辑的分支,防止自己和自己匹配导致误判 - 高效的存在性检查:
some()方法找到第一个重复项后会立即停止遍历,性能比手动循环更优 - 清晰的状态设置:只在遍历结束后根据最终结果设置
exists值,逻辑清晰不易出错
额外建议
- 确保
BranchCodeArray的长度和this.company_details.branches完全一致,每个分支都有对应的exists状态字段 - 可以把校验逻辑从
blur事件改成input事件,实现实时校验,提升用户体验 - 如果分支代码需要区分大小写,可以把对比逻辑改成
branch.code?.trim().toLowerCase() === currentCode.toLowerCase()
内容的提问来源于stack exchange,提问作者Nikki Nikhil
相关产品推荐
相关产品推荐

