【对比数组相同字段】在单个数组中根据相同字段进行业务操作,双重for循环,去重数组

业务需求:
在单个数组中,不同的货物名称有多条。

其中相同的货物名称也可以有多条。

相同的货物名称中根据归类标准进行控制,如果数量超了或者价格超了,

都要进行不同的操作,比如数量超了,判断条件是所有的货物名称的数量累加

与一个标准数量进行比对,累加超了才算超。

而价格是单行,只要有一行超了标准价格,整个都算超。

那就要根据数组中的货物名称进行比较,相同的货物名称要按业务需求进行对比。

难点就是,如何在单个数组中去做这件事,仅一个for循环似乎很难实现

感谢同事给的思路,这里提供两种方法供参考

首先是双重for循环,外层从0开始,内层从i+1开始,判断相邻的两项的code是否一致,sum1累加所有的数量,然后进行判断

            let sum1 = 0
             let sum2 = 0
            for (var i = 0; i < arr.length; i++) {
            for (var j = i + 1; j < arr.length; j++) {
                if (arr[i].Code == arr[j].Code) {
                 sum1 = arr[j].qty + arr[i].qty
                arr[i].totalQty = sum2
                  arr[j].totalQty = sum2
                 // 超数量
             if (arr[i].totalQty > arr[i].configAmount) {
               if (arr[i].controType == '1' || (arr[i].controType == '3'      			&& arr[i].totalQty > arr[i].configAmount)) {
                   arr[i].configStatus = '2'
                 }
                }

                 // 超金额
                  else if (arr[i].priceAmt > arr[i].priceCeiling || arr[j].priceAmt > arr[j].priceCeiling) {
                 for (var s = 0; s < arr.length; s++) {
                    arr[s].configStatus = '3'
                 }
                }
               }
             }

双重for循环只能是提供个思路,因为需求有些复杂,有些东西不好实现

就只能用下面这种方法,将原数组去重之后和原数组进行对比
根据货物名称进行去重,去重后的数组每一项货物名称都是唯一的,然后和原数组进行对比,这样能保证对比条件是成立的。

首先去重原数组,直接复制就行了,我之前手敲一遍,括号括错了,导致怎么写都无法去重

   // 原数组去重
    filterDarr(arr) {
      const res = new Map()
      return arr.filter(item => !res.has(item.Code) && res.set(item.Code, 1))
    },

在需要处理的方法里

  let newDarr = this.filterDarr(this.tableData)
  //先循环去重的数组
    for (var i = 0; i < newDarr.length; i++) {
    //定义变量去累加数量
    newDarr[i].totalQty = 0
    for (var j = 0; j < this.tableData; j++) {
    if (arr[j].Code == newDarr[i].Code) {
    //进行数量的累加赋值
      newDarr[i].totalQty += arr[j].qty
      //业务的处理
         if (arr[j].controType == '1') {
                      if (newDarr[i].totalQty > arr[j].configAmount && newDarr[i].priceCeiling < 50000) {
                        arr[j].configStatus = '2'
                      } else if (newDarr[i].totalQty > arr[j].configAmount && newDarr[i].priceCeiling > 50000) {
                       
                        arr[j].configStatus = '4'
                      } else {
                        arr[j].configStatus = '1'
                      }
                    } 
           }
                }
              }        

然后调接口传值给后端,还是传原数组
        getBySum(this.tableData).then(res => {-----}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值