我有一个从axios调用中获得的列表,我尝试创建一个数组,在该数组中具有相同id的产品,增加该产品的数量和小计,否则它们将被添加为是的。
但是我总是得到数量= 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
}
....
答案 0 :(得分: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);
}
});
答案 1 :(得分:0)
这是因为您初始化组中项目的方式。字符串值是从服务器返回的,然后尝试将它们添加到浮点数中。尝试通过控制台运行它。
"35.00" + parseFloat("35.00")
要解决此问题,必须首先将值初始化为浮点型。代替这个:
dataGroup.push(element)
尝试一下:
dataGroup.push({
id: element.id,
product_id: element.product_id,
total: parseInt(element.total),
count: parseFloat(element.count),
print: !!element.print,
});
查看此fiddle