我有一個需要用特定條件過濾的陣列
**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有備份的價值,所以這是優先事項。如果該值沒有備份有后綴,那么它應該優先考慮
eg:qrstuv
我對第二點印象深刻。我試過這個代碼
function getLatestJobId(){
let finalArr=[];
arr.forEach(val=>{
if(val.indexOf('-backup') > -1){
finalArr.push(val);
}
})
return finalArr;
}
uj5u.com熱心網友回復:
根據解釋,要求是過濾掉帶有-backupas 后綴的單詞。
如果單詞沒有-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())
uj5u.com熱心網友回復:
你可以做:
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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/452960.html
標籤:javascript 打字稿 ecmascript-6
上一篇:在IDEJetBrainsWebStorm中正確格式化函式引數的解壓物件屬性
下一篇:泛型在打字稿中使用默認值
