业务需求:
在单个数组中,不同的货物名称有多条。
其中相同的货物名称也可以有多条。
相同的货物名称中根据归类标准进行控制,如果数量超了或者价格超了,
都要进行不同的操作,比如数量超了,判断条件是所有的货物名称的数量累加
与一个标准数量进行比对,累加超了才算超。
而价格是单行,只要有一行超了标准价格,整个都算超。
那就要根据数组中的货物名称进行比较,相同的货物名称要按业务需求进行对比。
难点就是,如何在单个数组中去做这件事,仅一个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 => {-----}