如何在JavaScript对象中找出不存在的指定Name字段?
解决方法:找出不在members列表中的Name字段
我来帮你搞定这个需求!先梳理下你现有代码里的几个小问题,再一步步实现目标:
现有代码的问题
- 循环从
i=0开始,i-1会得到-1,此时splitString[-1]是undefined,完全是无效判断 - 没声明
$temp变量(会变成全局变量,不符合JS最佳实践) - 用
find方法查找后,既没判断是否找到目标,也没收集那些不存在的名字
正确实现步骤
- 先处理分割后的字符串数组,过滤掉空值(你的
dataString末尾有|,split后会产生空字符串) - 把
members里所有的Name提取出来存入Set,后续查找会比数组高效很多 - 遍历处理后的名字数组,筛选出不在
Set中的名字
完整代码示例
// 你的members对象 var members = [ { "Class": "E", "Rating": "1000", "ID": "16720664", "Name": "Adeyemon, Murie", "Expires": "1000.10.10" }, { "Class": "B", "Rating": "1735", "ID": "12537964", "Name": "Ahmed, Jamshed", "Expires": "2018.10.18" }, { "Class": "C", "Rating": "1535", "ID": "12210580", "Name": "Attaya, James", "Expires": "2019.01.12" }, { "Class": "F", "Rating": "0001", "ID": "16281977", "Name": "Auld, Thomas", "Expires": "1000.10.10" }, { "Class": "B", "Rating": "1793", "ID": "10117780", "Name": "Badamo, Anthony", "Expires": "2018.09.12" } ]; // 待检查的字符串 let dataString = "Adeyemon, Murie|Ahmed, Jamshed|Attaya, James|Badamo, Anthony|Birmingham, Gerald|"; // 1. 分割并过滤空值 let splitNames = dataString.split("|").filter(name => name.trim() !== ""); // 2. 提取members中的所有Name到Set(查询效率更高) const existingNames = new Set(members.map(member => member.Name)); // 3. 筛选出不在Set中的名字 const missingNames = splitNames.filter(name => !existingNames.has(name)); // 输出结果 console.log("不存在的名字:", missingNames); // 会输出 ["Birmingham, Gerald"]
代码解释
filter(name => name.trim() !== ""):去掉分割后产生的空字符串,避免无效检查new Set(members.map(member => member.Name)):把所有已存在的名字存入Set,Set.has()的查询时间复杂度是O(1),比数组find()的O(n)高效得多,尤其当members数量大时splitNames.filter(name => !existingNames.has(name)):直接筛选出不在现有名字集合中的项,代码简洁又高效
如果你习惯用循环写法,也可以这样修改:
let dataString = "Adeyemon, Murie|Ahmed, Jamshed|Attaya, James|Badamo, Anthony|Birmingham, Gerald|"; let splitString = dataString.split("|"); const missingNames = []; const existingNames = new Set(members.map(m => m.Name)); for (let i = 0; i < splitString.length; i++) { const name = splitString[i]; if (name.trim() !== "" && !existingNames.has(name)) { missingNames.push(name); } } console.log(missingNames);
内容的提问来源于stack exchange,提问作者verlager
相关产品推荐
相关产品推荐

