javascript - 在 typescript 中使用條件篩選和比較兩個陣列
我如何使用另一個 array 過濾某些屬性,如果符合條件,它將返回其他屬性,例如:
Array1 = [{offenceCode: 'JLN14', offenceDesc:'Speeding'}]
Array2 = [{id:0, offenceCode: 'JLN14'}, {id:1, offenceCode: 'JLN13'}]
首先我得到 Array2,然後將屬性 offenceCode 與 Array1 比較,如果有相同的屬性,Array1 應該返回 OffenceDesc
這是我曾經嘗試過的:
demo = [
{
offenceCode: 'JLN14',
offenceType: '7',
offenceDesc: 'emergency lane abuse'
},
{
offenceCode: 'BRG04',
offenceType: '8',
offenceDesc: 'speeding'
},
{
offenceCode: 'CRG04',
offenceType: '9',
offenceDesc: 'emergency lane abuse'
}
];
offenceCode: any;
ngOnInit() {
this.offenceCode = this.items.map(x => x.offenceCode1);
console.log(this.offenceCode);
if(this.demo.forEach(x => x.offenceCode === this.offenceCode)) {
// return offenceDesc
}
}
目前我不知道該如何解決這個問題,這是我的 Stackblitz 範例,我可以接受任何解決這個問題的建議,如果有更好的做法,也請告訴我,謝謝
答案#1
看起來你正在尋找:
offenceCode: string[];
ngOnInit() {
this.offenceCode = this.items.map(x => x.offenceCode1);
this.demo.forEach(x => {
this.offenceCode
.filter(e => e === x.offenceCode)
.forEach(e => console.log(x.offenceDesc));
});
}
進行了以下編輯:
- 你應該將
offenceCode定義為 string[] - 現在你可以遍歷
demo陣列,並對上一行的 offenceCode 進行過濾。任何符合條件的項目現在都會被記錄到控制台(你可以根據需求更改此行為)。
答案#2
你可以使用 Array.prototype.findIndex 來做到這一點。
const matchIndex = this.demo.findIndex(x => x.offenceCode === this.offenceCode);
if(matchIndex !== -1) {
return this.demo[matchIndex].offenceDesc;
}
return undefined;
請注意,如果沒有找到匹配,findIndex 將返回 -1。
