过滤阵列 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"
]
如果任何值有 -backup 有后缀那么它应该采用那个并且它
应该避免没有备份的。这里 fghij-backup
有价值
有备份所以这是优先事项。
如果值没有备份 has 后缀那么它应该带它 has
优先级 eg: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())
我有一个数组需要根据特定条件进行过滤
**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
有价值 有备份所以这是优先事项。如果值没有备份 has 后缀那么它应该带它 has 优先级
eg: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())