網站搜尋

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));
    });
}

進行了以下編輯:

  1. 你應該將 offenceCode 定義為 string[]
  2. 現在你可以遍歷 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。