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

如何用JavaScript/jQuery移除strReviewers中指定ID的用户记录

简化JavaScript处理用户记录字符串的实现方案

需求背景

需处理格式特殊的用户记录字符串strReviewers:

  • 整条记录以;分隔
  • 单条记录内的字段以*,*分隔,第一个字段为userid
  • 传入ID数组,移除所有userid匹配的记录,重新拼接成原格式的字符串

原实现与示例数据

示例字符串:

var strReviewers = "88664734*,*Andrew Farmer*,*19042*,**,*,19013,19017,19042,19043,19051,*;*88639280*,*Sally Hopewell*,*19042*,**,*,19013,19017,19042,19043,*;*88686221*,*Jonathan Rees*,*19042*,**,*,19013,19017,19042,19043,19060,*;*88676217*,*James Wason*,*19042*,**,*,19013,19017,19042,19043,*;*";

原实现代码:

var strReviewers = "88664734*,*Andrew Farmer*,*19042*,**,*,19013,19017,19042,19043,19051,*;*88639280*,*Sally Hopewell*,*19042*,**,*,19013,19017,19042,19043,*;*88686221*,*Jonathan Rees*,*19042*,**,*,19013,19017,19042,19043,19060,*;*88676217*,*James Wason*,*19042*,**,*,19013,19017,19042,19043,*;*";
function removeReviewerByID(ids = []) {
   return strReviewers
        .split(";").map(item => item.split("*,*"))
        .filter(item => item[0] !== "*")
        .map(item => ({
          userid:item[0],
          name:item[1],
          roleid:item[2],
          txtSpeciality:item[3],
          rolelist:item[4]
        }))
        .filter(item => (!ids.includes(item["userid"]) && !ids.includes(item["userid"].replace(/\*/g, ''))))
        .map(item => ({
          record: item["userid"].concat("*,*").concat(item["name"]).concat("*,*").concat(item["roleid"]).concat("*,*").concat(item["txtSpeciality"]).concat("*,*").concat(item["rolelist"]).concat(";")))
        .reduce((accumulator, item) => {  
          return accumulator.concat(item["record"]);
        }, "")
}

console.log(removeReviewerByID(["88664734","88639280","88676217"]));

简化后的实现方案

可以从效率、冗余代码、可读性三个维度简化:

var strReviewers = "88664734*,*Andrew Farmer*,*19042*,**,*,19013,19017,19042,19043,19051,*;*88639280*,*Sally Hopewell*,*19042*,**,*,19013,19017,19042,19043,*;*88686221*,*Jonathan Rees*,*19042*,**,*,19013,19017,19042,19043,19060,*;*88676217*,*James Wason*,*19042*,**,*,19013,19017,19042,19043,*;*";

function removeReviewerByID(ids = []) {
  const idSet = new Set(ids);
  return strReviewers.split(';')
    // 过滤空记录和无效记录
    .filter(record => record.trim() && !record.startsWith('*'))
    // 过滤需要移除的ID记录
    .filter(record => {
      const userId = record.split('*,*')[0].replace(/\*/g, '');
      return !idSet.has(userId);
    })
    // 拼接回原格式
    .map(record => `${record};`)
    .join('');
}

console.log(removeReviewerByID(["88664734","88639280","88676217"]));

简化细节说明

  • 效率优化:把ID数组转为Set,将includes的O(n)查找成本降为O(1),数据量越大优势越明显
  • 减少冗余转换:跳过将记录转为对象再还原的步骤,直接操作原始字符串片段,减少内存占用和代码层级
  • 可读性提升:用模板字符串和join替代多次concat和reduce,拼接逻辑更直观
  • 边界处理增强:保留原代码的无效记录过滤逻辑,新增trim()处理空字符串,避免末尾出现多余分号

内容的提问来源于stack exchange,提问作者Karim Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:50:22