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

如何在JavaScript对象中找出不存在的指定Name字段?

解决方法:找出不在members列表中的Name字段

我来帮你搞定这个需求!先梳理下你现有代码里的几个小问题,再一步步实现目标:

现有代码的问题

  • 循环从i=0开始,i-1会得到-1,此时splitString[-1]是undefined,完全是无效判断
  • 没声明$temp变量(会变成全局变量,不符合JS最佳实践)
  • 用find方法查找后,既没判断是否找到目标,也没收集那些不存在的名字

正确实现步骤

  1. 先处理分割后的字符串数组,过滤掉空值(你的dataString末尾有|,split后会产生空字符串)
  2. 把members里所有的Name提取出来存入Set,后续查找会比数组高效很多
  3. 遍历处理后的名字数组,筛选出不在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:47:35