添加新项目时出现角度的foreach问题

时间:2019-02-01 11:55:35

标签: javascript arrays angular foreach reduce

我在Firebase中有一个角度应用程序。我想更改Firebase项目的值。每次总KM更改时,都需要将其设置为正确的值。这就是我的服务:

    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 :(得分:3)

this.uniqueRides.push(ride.km);只是将其他项推入数组。

请检查是否包含旅程.includes

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

或每次清除阵列。 this.uniqueRides = []