过滤器阵列Javascript/typescript



我有一个数组,需要使用特定条件进行筛选

**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"
]
  • 如果任何值都有-backup后缀,那么它应该使用该后缀应该避免没有备份的。此处fghij-backup有值备份,所以这是优先事项。

  • 如果该值没有backup后缀,则应该取它有优先级eg:qrstuv

我被第二点击中了。我试过使用这个代码

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

return finalArr;
} 

根据解释,要求过滤掉后缀为-backup的单词。

如果单词没有-backup后缀,则只有在没有备用备份单词时才允许使用这些单词。例如:对于abcde,因为我们已经有了abcde-backup,所以不允许它出现在结果中。但是,对于qrstuv,没有备用方案(qrstuv-backup(,所以允许它

因此,这方面的代码如下:

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())

你可以做:

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)

最新更新