Angular 5-仅对第一个项目进行更新和forEach

时间:2018-12-09 15:00:28

标签: javascript firebase foreach angular5 angularfire2

我试图在Angular 5中运行两个函数calculoDes()desempenhos(),但是结果出现了奇怪的行为。

第一个函数在某些阶段执行计算,始终为下一步生成对象数组。对步骤进行了评论(也许问题是我如何执行此功能,尽管它起作用了):

calculoDes(){
      // each query item of 'ficha' creates a keyarray array and uses data to compute the quotient (quociente)
      this.fichas.subscribe(res => {
        res.forEach(item => {
          this.keyArray.push(item.$key);
          this.quocienteCidade = +(((item.cap_cilindrica/100)+(item.quant_marchas/2)+(item.largura/100)+(item.comprimento/1000)+(item.entre_eixos/1000)+(item.peso_seco/10))*-1).toFixed(5);
          this.desCidade.push({quociente: this.quocienteCidade, id: item.$key});
        });

        // The 'desCidade' object must be ordered by the quotient value, using the sortOn()
        this.sortOn(this.desCidade, "quociente");  

        // The 'range' is calculated by dividing 100 by the total amount of items
        this.range = 100/this.desCidade.length;

        / * Performance (desempenhoCidade) is calculated from an "equivalence" between each position in the array 'deCidade' and the percentage that it represents. The largest will always be 100. Stores on object 'desCidade2' * /
        for (var i = 0; i < this.desCidade.length; i++) {
          this.desempenhoCidade = +(100-((i+1)-1)*this.range).toFixed(1);
          this.desCidade2.push({desempenhoCid: this.desempenhoCidade});
        }

        //Merge between two Arrays: 'desCidade' e 'desCidade2'
        this.desCidade3 = _.merge(this.desCidade, _.map(this.desCidade2, this.getDesempenho));

        // Returns the previous sort, but with the already calculated performance
        this.resultCidade = this.sortTwo(this.desCidade3, this.keyArray, 'id');
        // retrieve only performance (desempenhoCid)
        this.resultCidade = this.resultCidade.map(a => a.desempenhoCid);    
      });
    }



  //sort using the $ key property, sortOn is for NEGATIVES, AS 'CIDADE'
   sortOn (arr, prop) {
     arr.sort ((a, b) => {
          if (a[prop] > b[prop]){
              return -1;
          } else if (a[prop] < b[prop]){
              return 1;
          } else {
          return 0;   
          }
        }
    );
  }

// order an array of objects in the order of an array
sortTwo (array, order, key) {
  array.sort ((a, b) => {
    var A = a[key], B = b[key];     
    if (order.indexOf(A) > order.indexOf(B)) {
      return 1;
    } else {
      return -1;
    }       
  });  
  return array;
};

// Lodash to merge between two Arrays, including the property below
getDesempenho(el) { 
  return _.pick(el, 'desempenhoCid'); 
}

我在ngOnInit()中调用此函数,结果与预期的一样。

从此函数的结果来看,我需要同时使用两个数组(keyArrayresultCidade)来更新Firebase中的数据(使用AngularFire):

desempenhos(){
      this.keyArray.forEach(keyItem => {
        this.db.object('ficha/' + keyItem).update({
          // the item to be updated
          des_cidade: this.resultCidade[0]
        });
        // to each $key, I use the first position of the array and then I exclude it
        this.resultCidade.shift();
      })
    }

问题在于此功能仅在前几项上正确执行,然后奇怪地返回到功能calculoDes(),变得像循环循环(考虑这两个功能!)。

我已经搜索了它,已经重做了,但是我找不到函数之间的错误所在。

0 个答案:

没有答案