如何筛选包含指定输入字符的字符串对应对象存入新数组及异常排查
问题原因与修复方案
你遇到的数组偶发为空的问题,由以下几个明确的错误导致:
- 语法不完整:你提供的代码片段未补全
for循环的闭合大括号,也没有补全nameSearch函数的闭合大括号和返回语句,运行时会触发语法错误,函数执行中断后自然无法得到预期的返回值。 - 边界逻辑错误:匹配判断条件中加入了
searchInput.length != 0的限制,当搜索框输入为空时,所有匹配项都会被过滤,newList必然为空。如果你的需求是搜索框为空时返回全部列表,该判断不符合预期。 - 空白字符干扰:如果用户输入时带了首尾空格,或者姓名字段本身存在多余首尾空格,会导致
includes匹配失败,属于常见的隐性问题。
修正后代码
const search = document.querySelector('#search'); const ul = document.querySelector('.student-list'); function nameSearch(list){ let newList = []; // 统一处理搜索输入的首尾空白与大小写 const searchInput = search.value.toLowerCase().trim(); // 可选:搜索框为空时直接返回全量列表,不需要遍历,不需要该逻辑可删除 if(searchInput.length === 0) return list; for(let i = 0; i < list.length; i++) { // 姓名也做空白与大小写统一处理 const firstName = list[i].name.first.toLowerCase().trim(); const lastName = list[i].name.last.toLowerCase().trim(); const fullName = `${firstName} ${lastName}`; if(fullName.includes(searchInput)){ newList.push(list[i]); } } return newList; }
额外排查点
如果修复后仍存在问题,可按以下顺序验证:
- 确认传入
nameSearch的list参数是正常的原始数据数组,不存在传入时为空的情况 - 打印
searchInput和每一轮的fullName值,确认字符串匹配逻辑符合预期,排除特殊字符、拼写不一致等问题
内容的提问来源于stack exchange,提问作者NVC
相关产品推荐
相关产品推荐

