我有一个从 axios 调用中获得的列表,我尝试创建一个数组,其中具有相同 ID 的产品,增加该产品的数量和小计,否则它们将添加为是的。
但我总是得到 quantity = 1.xx 和一个错误的总数,我不明白为什么或哪里有错误
let dataGroup = [];
resp.data.forEach((element)=>{
let indexElement = dataGroup.findIndex(elm => {
return (elm.product_id === element.product_id ) && element.print;
});
if(indexElement !== -1){
dataGroup[indexElement].total += parseFloat(element.total);
dataGroup[indexElement].count += parseInt(element.count);
roundNumber(dataGroup[indexElement].count,0);
roundNumber(dataGroup[indexElement].total,2);
}
else{
dataGroup.push(element);
}
});
函数
window.roundNumber = function(num, scale) {
if(!("" + num).includes("e")) {
return +(Math.round(num + "e+" + scale) + "e-" + scale);
} else {
var arr = ("" + num).split("e");
var sig = ""
if(+arr[1] + scale > 0) {
sig = "+";
}
return +(Math.round(+arr[0] + "e" + sig + (+arr[1] + scale)) + "e-" + scale);
}
}
dataGroup 在第一个实例中是空的,一切都根据我从 axios 调用中收到的数据工作,例如在图像中第一行我必须得到 9 的数量但我收到的是 1.00,单位值为 35 ST中应该是9 * 53,但不是这样的
对axios的响应
[
{
"id": 4,
"product_id": 1,
"count": "1.00",
"total": "35.00",
"print": 1
},
{
"id": 5,
"product_id": 1,
"count": "1.00",
"total": "35.00",
"print": 1
},
{
"id": 6,
"product_id": 1,
"count": "1.00",
"total": "35.00",
"print": 1
}
....
最佳答案
这里有一些逻辑问题。检查这个(查看代码中的注释):
resp.data.forEach((element)=>{
let indexElement = dataGroup.findIndex(elm => {
return (elm.product_id === element.product_id ) && element.print;
});
if(indexElement !== -1){
// first convert total/count to float/int then update in existing array element
dataGroup[indexElement].total += roundNumber(parseFloat(element.total), 0);
dataGroup[indexElement].count += roundNumber(parseInt(element.count), 2);
}
else {
// need to convert total/count to float/int then push to dataGroup
element.total = roundNumber(parseFloat(element.total), 0);
element.count = roundNumber(parseInt(element.count), 2);
dataGroup.push(element);
}
});
关于javascript - 如何使用 Vue JavaScript 对元素进行分组以添加数组中的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53305664/