'Filter Array Javascript/typescript
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-backuphas 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;
}
Solution 1:[1]
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())
Solution 2:[2]
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)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | |
| Solution 2 |
