user13928344
user13928344

Reputation: 216

JS remove duplicates and characters in Array

I would like some assistance to remove duplicates and remove the | and the '' at the start and end.

My code so far

const thedates = this.results
            .filter((result) => result.thedate)
            .map((item) => item.thedate)
            .filter((thedate, i, arr) => arr.indexOf(thedate) === i);
          // Split multiple thedates in strings and store in an array
          let thedate = [];
          thedates.forEach((item) => {
            const splitArr = item.split(", ");
            thedate = thedate.concat(splitArr).sort();
          });

          // Filter again for unique thedates
          this.thedates = thedate.filter(
            (thedate, i, arr) => arr.indexOf(thedate) === i
          );

My output in the console from the code above

'full-time', 'full-time|full-time', 'full-time|full-time|full-time', 'full-time|full-time|full-time|full-time', 'full-time|full-time|part-time|full-time|part-time|part-time',

I would just like each entry to say: full-time, part-time or full-time if there is just one between the quotes.

Can anyone help to add to my code please?

Upvotes: 0

Views: 93

Answers (3)

Ludolfyn
Ludolfyn

Reputation: 2075

You could try something like this (similar to @Julien Mellon's post) where you use .split(), but you return an array of arrays with the second level array being the entry:

const thedates = ['full-time', 'full-time|part-time', 'full-time|part-time|full-time', 'full-time|full-time|part-time|full-time', 'full-time|full-time|part-time|full-time|part-time|part-time']

const theDatesFormatted = thedates.map(item => {  
  const arr = item.split('|')
  const uniqueArr = [...new Set(arr)]
  return uniqueArr
})

console.log(theDatesFormatted)

Upvotes: 1

Alex
Alex

Reputation: 1072

You're essentially asking two things, how to turn a delimited string into array and how to remove duplicate values from an array. You can parse by using the .split() method, and remove duplicates from an array by constructing a set with it then turning it back into an array with the spread operator.

Altogether (where array is your input array):

let filteredArray = [ ...new Set( string.split( '|') ) ]

const string = "full-time|part-time|full-time|part-time|full-time|part-time|full-time|part-time|full-time|part-time|full-time|part-time|part-time|full-time|full-time|part-time|full-time|part-time|full-time|full-time|part-time|part-time";
let filteredArray = [ ...new Set( string.split( '|') ) ]
let result = filteredArray.join(', ');
console.log(result)

Upvotes: 2

Julien Mellon
Julien Mellon

Reputation: 1

if your inputs are

'full-time', 'full-time|full-time', 'full-time|full-time|full-time', 'full-time|full-time|full-time|full-time', 'full-time|full-time|part-time|full-time|part-time|part-time'

perhaps you could just call .split('|') ?

Upvotes: 0

Related Questions