проблемы углового foreach при добавлении новых предметов - PullRequest
0 голосов
/ 01 февраля 2019

У меня угловое приложение с Firebase.Я хочу изменить значение элемента Firebase.Каждый раз, когда общий КМ изменяется, его необходимо установить на правильное значение.так что это мои услуги:

    countKm(){
    this.totalKmRef = this.db.list(this.uid + '/rides');
    this.totalKm$ = this.totalKmRef.valueChanges();
    this.totalKm$.subscribe(res=> this.getAllRides(res));
  }

  getAllRides(res){
    this.rides = res;
    this.rides.forEach(ride =>{
        this.uniqueRides.push(ride.km);
    })
    this.totalKm = this.uniqueRides.reduce(this.sum);
    localStorage.setItem("totalKm", this.totalKm);
  }

  sum(a, b){
    return a += b;

  }

Теперь по какой-то причине, когда я добавляю поездку, все в порядке, но во второй раз все идет не так.

например, в первый раз foreachработает, я получаю (после того, как у firebase уже есть 5 элементов):

0{
0: 5,
1: 5,
2: 5,
3: 5,
4: 5,
}

После того, как я запускаю foreach 1 раз, мой список объектов выглядит следующим образом: 0 {0: 5, 1: 5, 2: 5, 3: 5, 4: 5, 5: 5,}

После добавления нового значения во второй раз и далее foreach делает это:

0{
    0: 5,
    1: 5,
    2: 5,
    3: 5,
    4: 5,
    5: 5,
    6: 5,
    7: 5,
    8: 5,
    9: 5,
    10: 5,
    11: 5,
    12: 5,

        }

Есть ли кто-нибудь, кто может мне помочь?Я думаю, что это неправильная конфигурация в foreach, но не могу узнать где.

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 01 февраля 2019

this.uniqueRides.push(ride.km); просто добавляет дополнительные элементы в массив.

Либо проверьте, включено ли переключение .includes

this.rides.forEach(ride => {
   if(!this.uniqueRides.includes(ride)) {
      this.uniqueRides.push(ride.km);
   }
})

, либо очищайте массив каждый раз.this.uniqueRides = []

...