簡體   English   中英

數字數組將轉換為鍵值對數組;

[英]Array of numbers gets converted to an array of key-value pairs;

我在Angular4應用中創建了此函數:

enrollmentCheck() {

this.allCourses.forEach(course => {
  this._courses.getCurrentEnrolment(course.slug).subscribe(res => {
    if(res.length > 0){
      this.enrolledCourses.push(res[0].course_id);
      console.log(this.enrolledCourses);
    }
  })
});
console.log(this.enrolledCourses);
}

它應該遍歷對象數組,並檢查用戶是否已注冊其中的任何對象。

第一位工作得很好,訂閱給了我正確的數據(分辨率)。 然后,我需要將Course_id屬性存儲到數組中。

第一個日志(在循環內)似乎工作正常。 我懂了

[1]
[1,2]
[1,2,5]
[1,2,5,7]

作為輸出,每次循環執行一次。

問題是第二個日志(循環外)將輸出類似以下內容的內容:

[
 0: 1
 1: 2
 2: 5
 3: 7
]

而不是

[1,2,5,7]

如我所願,因為我將需要遍歷此數組,而我找不到找到處理該數組的方法。

有人可以幫忙嗎? 對於某人來說這似乎是一個愚蠢的問題,我深表歉意,但任何幫助將不勝感激。

謝謝,M

您的方法存在一些問題。 首先,您要在循環內創建訂閱,這是個壞主意,因為您永遠不會完成訂閱。 其次,您正在循環內執行asyc操作,因此,在第二個控制台日志出現時,數據可能還不存在。

更好的解決方案是使用Observable.forkJoin等待所有異步請求,然后映射數據。

例如

enrollmentCheck() {
  Observable.forkJoin(
    this.allCourses.map(course => {
      return this._courses.getCurrentEnrollment(course.slug);
    }
  ).map(res => {
    return res
       .filter(enrollment => enrollment.length > 0)
       .map(enrollment => enrollment[0].course_id)
  }).subscribe(data => console.log(data))
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM