我试图在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()
中调用此函数,结果与预期的一样。
从此函数的结果来看,我需要同时使用两个数组(keyArray
和resultCidade
)来更新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()
,变得像循环循环(考虑这两个功能!)。
我已经搜索了它,已经重做了,但是我找不到函数之间的错误所在。