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

JS处理对象数组姓名:正确移除(T1)/(T2)后缀保留完整原值

对象数组姓名字段移除固定后缀实现方案

问题复现

相关测试数据、错误写法、实际输出与预期效果如下:
原始数据源:

const agent = [
  {
    "agent-name": "Jm Fajardo",
    "gender": "Male"
  },
  {
    "agent-name": "Lem Cruz (T1)",
    "gender": "Male"
  },
  {
    "agent-name": "Levi Fajarda (T2)",
    "gender": "Male"
  },
  {
    "agent-name": "Ian Pacido",
    "gender": "Male"
  }
];

错误的遍历处理逻辑:

$.each(agent, function (key, value) {
  var sliced = value["agent-name"].slice(0, -5);
  console.log("agent :", sliced);
});

执行后不符合预期的输出:

agent : Jm Fa
agent : Lem Cruz
agent : Levi Fajarda
agent : Ian P

预期输出结果:

agent : Jm Fajardo
agent : Lem Cruz
agent : Levi Fajarda
agent : Ian Pacido

错误原因

固定长度切片的逻辑没有做后缀存在性判断: (T1)、 (T2)算上括号前的空格,总长度刚好是5个字符,所以带后缀的姓名执行slice(0,-5)能得到正确结果,但不带后缀的姓名会被强制切掉最后5个字符,自然会出现内容截断的问题。

修复方法

核心逻辑是先判断姓名末尾是否存在要移除的(T1)/(T2)后缀,存在再做截取处理,不存在直接返回原始姓名,两种常用实现方式可选:

方法1:正则替换(兼容性最好)

正则可以自动适配后缀前的空格数量,也能兼容后续出现T3、T4等更多职级后缀的场景,代码如下:

$.each(agent, function (key, value) {
  const name = value["agent-name"];
  // 匹配字符串末尾的 (T+数字) 格式后缀,替换为空
  const finalName = name.replace(/\s*\(T\d+\)$/, '').trim();
  console.log("agent :", finalName);
});

如果只需要严格匹配(T1)、(T2)两种后缀,把正则改成/\s*\(T[12]\)$/即可。

方法2:后缀判断+固定切片(逻辑直观)

如果确定后缀格式固定、和姓名之间只有一个空格,也可以先判断后缀再切片:

$.each(agent, function (key, value) {
  const name = value["agent-name"];
  let finalName = name;
  // 检测末尾是否匹配目标后缀
  if (name.endsWith('(T1)') || name.endsWith('(T2)')) {
    finalName = name.slice(0, -5).trim();
  }
  console.log("agent :", finalName);
});

两种写法执行后都能得到预期的输出结果。


内容的提问来源于stack exchange,提问作者Lem Fajarda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 23:45:36