过滤阵列 Javascript/typescript

Filter Array 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"
    ]

我对第二点印象深刻。我试过这个代码

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

你可以这样做:

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)

根据说明,要求过滤掉后缀为-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())