How can I remove text from a strReviewers string using JavaScript or jQuery?

How can I remove text(e.g [“88664734”,“88639280”,“88676217”]) from a strReviewers string which contains list of Reviewers separated by semicolon and then join the whole string again either using JavaScript or jQuery?

I get a dynamic string(strReviewers) which contains multiple user records separated by comma:

I need to remove whole user record if I pass an array of ids. e.g [“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 contains user records separated by semicolon and each user record is separated by ,.

Each record contains 1 user which is in the shape of userid then following by name then following by roleid then following by txtSpeciality following by then rolelist.

type or paste code here
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,*;

I have done it using the following code but wondering this can be achieved some other easier way?
function removeReviewerByID(ids = []) {
   return strReviewers
        .map(item => item.split("*,*"))      
        .filter(item => item[0] !== "*")
        .map(item => ({
        .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"]);
        }, "")        


You could do it like this:

function removeReviewerByID(ids) {
  return strReviewers
           .filter((el) => {
             const records = el.split(',');
             const id = records[0].replace(/\*/g, "");

             return (!id || ids.includes(id))? false : true;

This produces:


// *88686221*,*Jonathan Rees*,*19042*,**,*,19013,19017,19042,19043,19060,*;

Does that work for you, or have I overlooked something?

Txs, very smart, really appreciated. This is exactly what I am looking for.

1 Like