Home > OS >  Filter Array Javascript/typescript
Filter Array Javascript/typescript

Time:03-31

I have an array that needs to be filtered with specific condition

**Input**
    let arr=[
        "abcde-backup",
        "abcde",
        "fghij-backup",
        "fghij",
        "klmnop-backup",
        "qrstuv"
    ]
    I am trying to achieve output like this
**output**
    [
        "abcde-backup",
        "fghij-backup",
        "klmnop-backup",
        "qrstuv"
    ]
  • If any value has -backup has suffix then it should take that and it should avoid the one without backup . Here fghij-backup has value with backup so that is the priority.

  • If the value doesnt have backup has suffix then it should take it has priority eg:qrstuv

I am struck with the second point . I have tried with this code

function getLatestJobId(){ 
    let finalArr=[];
    arr.forEach(val=>{
      if(val.indexOf('-backup') > -1){
         finalArr.push(val);
      }   
    })
    
    return finalArr;
} 

CodePudding user response:

As per the explaination, the requirement is to filter out the words with -backup as suffix.

In case the words don't have the -backup suffix, allow those words only when there is no alternative backup word present. E.g.: For abcde, since we already have abcde-backup, don't allow it in result. But, for qrstuv, there is no backup alternative (qrstuv-backup), so allow it.

So, the code for this would be as follow:

let arr=[
        "abcde-backup",
        "abcde",
        "fghij-backup",
        "fghij",
        "klmnop-backup",
        "qrstuv"
    ]

function getLatestJobId(){ 
    return arr.filter(val => val.endsWith('-backup') || !arr.includes(`${val}-backup`))
}

console.log(getLatestJobId())

CodePudding user response:

You can do:

const arr = [
  'abcde-backup', 
  'abcde', 
  'fghij-backup', 
  'fghij', 
  'klmnop-backup', 
  'qrstuv'
] 

const result = Object.values(arr.reduce((a, c) => {
  const [w] = c.split('-')
  a[w] = a[w]?.endsWith('-backup')
    ? a[w]
    : c
  return a
}, {}))

console.log(result)

  • Related