gpt4 book ai didi

javascript - 如何使用 JavaScript 或 jQuery 从 strReviewers 字符串中删除文本(例如 ["88664734","88639280","88676217"])?

转载 作者:行者123 更新时间:2023-12-05 01:49:01 30 4
gpt4 key购买 nike

如何从包含以分号分隔的审阅者列表的 strReviewers 字符串中删除文本(例如 ["88664734","88639280","88676217"]),然后使用 JavaScript 或 jQuery 再次加入整个字符串?

我得到一个动态字符串(strReviewers),其中包含多个用逗号分隔的用户记录:

如果我传递一个 id 数组,我需要删除整个用户记录。例如 ["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,*;*";

strReviewers 包含以分号分隔的用户记录,每条用户记录以, 分隔。

每条记录包含 1 个用户,其形式为 userid,然后是 name,然后是 roleid,然后是 txtSpeciality,然后是 rolelist。

/*
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"]));

最佳答案

一种方法是使用正则表达式。通过 | 连接将 ID 数组变成一个模式, 然后筛选不以该模式开头的记录。

为了保持数据结构的一致性,考虑使用.match(/.*?\*;\*/g)而不是 .split(";") - 通过匹配,您将保留格式(第一项不以 * 开头,最后一项以 ,*;* 终止)

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 pattern = new RegExp(`^(?:${ids.join('|')})\\*`);
return strReviewers
.match(/.*?\*;\*/g)
.filter(str => !pattern.test(str))
.join('');
}

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 pattern = new RegExp(
String.raw`(?:^|(?<=\*;\*))(?:${ids.join('|')})\*.*?\*;\*`,
'g'
);
return strReviewers.replace(pattern, '');
}

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

/(?:^|(?<=\*;\*))(?:88664734|88639280|88676217)\*.*?\*;\*/g意思是:

  • (?:^|(?<=\*;\*)) - 匹配
    • ^ - 行首,或
    • (?<=\*;\*) - *;* 前面的位置(审稿人部分的开始)
  • (?:88664734|88639280|88676217) - 匹配任何 ID
  • \* - 匹配文字 * (确保 ID 在这里结束)
  • .*? - 懒惰地匹配任何字符,直到遇到
  • \*;\* - 字符*;*

这种方法在每次匹配结束时匹配并删除评论者之间的分隔符。

关于javascript - 如何使用 JavaScript 或 jQuery 从 strReviewers 字符串中删除文本(例如 ["88664734","88639280","88676217"])?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74541416/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com