javascript - 如何使用 Vue JavaScript 对元素进行分组以添加数组中的数量

标签 javascript vue.js vuejs2

我有一个从 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,但不是这样的

enter image description here

对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/

相关文章:

javascript - 将特定类别中每个单词的首字母大写

javascript - 将 Django FilteredSelectMulitple 实现为无管理表单

javascript - 图标不显示 vue js

select - Vue 多选异常行为

javascript - 如何在尚未评估变量的情况下将变量传递给自定义组件?

javascript - 如果行和列中的四个元素相同,如何检查二维数组?

javascript - 为什么我从 HTTPS 域到 HTTP 本地主机的请求会失败 CORS?

vue.js - 使用 Vue 读取动态生成的输入 radio 的值

json - Vue Axios CORS 策略 : No 'Access-Control-Allow-Origin'

javascript - 如何使用vue js追加元素