一、买一赠一
lists:[{name: '苹果', pic: 2, num: 1}, { name: '梨子',pic: 3, num: 2, {name: '香蕉',pic: 4, num: 1 }] let total = 0//商品总数 let freeCount = 0//赠送数量 let currentCount = 0//计算当前赠送的数量 let spliceIndex = -1//截取的索引值 let spliceNum=0//对特殊商品的原价的数量 lists.map(function(item){ total+=item.num }) freeCount = parseInt(total/2) for(let i=0;i<lists.length;i++){ if(currentCount<freeCount){ currentCount+=lists[i].num spliceIndex = i }else{ spliceNum = currentCount-freeCount console.log('spliceNum',spliceNum) break } } console.log('total',total) console.log('freeCount',freeCount) console.log('spliceIndex',spliceIndex) console.log('lists',lists) // -- 获取需要更改的对象如果含有特殊商品 if(spliceNum>0) { let item= lists[spliceIndex] let newItem = {} Object.assign(newItem,item) newItem.num = spliceNum item.num = item.num-spliceNum lists.splice(spliceNum+1,0,newItem) } console.log(lists)排序(根据单价排序) 1,获取数组里面所有的数量 2.计算数量的一半 3.拿到一半时的索引值 4.判断此索引值的数量是否刚好等于需要总数量的一半 5.移除索引值之前的(如果第4步,不是刚好一半,需添加该索引值下的商品,及计算数量)
二、合并数组中属性相同的项
this.list = res.data.value; this.totallist = [] var map = {} for(var i = 0; i < this.list.length; i++){ var ai = this.list[i]; if(!map[ai.roomno]&&!map[ai.shopsid]){ this.totallist.push({ roomno: ai.roomno, shopsid: ai.shopsid, nRatio:ai.nRatio, shopsname:ai.shopsname, rate:0, YezhuFeiy:0, YezhuTich:0, data: [ai] }); map[ai.roomno] = ai; }else{ for(var j = 0; j < this.totallist.length; j++){ var dj = this.totallist[j]; if(dj.roomno == ai.roomno&&dj.shopsid == ai.shopsid){ dj.data.push(ai); dj.rate+= parseFloat(ai.rate); dj.YezhuFeiy+= parseFloat(ai.YezhuFeiy); dj.YezhuTich+= parseFloat(ai.YezhuTich); break; } } } }this.list是一个数组 根据这个数组里面的房间号roomno和shopid不一样进行合并分组
三、合并数组中属性相同的项,另外不同属性的值相加
let lists=‘需要合并的数组’ that.lists=[] for (let i = 0; i < lists.length; i++) { for (let j = lists.length - 1; j > i; j--) { if (lists[i].ItemNo == lists[j].ItemNo) { lists[i].ItemCount = parseFloat(lists[i].ItemCount) + parseFloat(lists[j].ItemCount); that.lists.push(j); } } } that.lists.sort(function(a, b) { return b - a; //排序 }); for (let k = 0; k < that.lists.length; k++) { lists.splice(that.lists[k], 1); } that.lists=lists1,将数组两次循环,得到相同的项的索引, 2,将索引从大到小排列 3,移除重复的索引项 四、类似点单重组数组
//使用lz-numinput
var itemno=(res.useId).split("_")[0] var itemname=(res.useId).split("_")[1] var price=(res.useId).split("_")[2] var o={ itemno:itemno, itemcount:1, itemname:itemname, price:price } let sum = -1; if (this.xzdcai.length > 0) { for (var j = 0; j < this.xzdcai.length; j++) { if (this.xzdcai[j].itemno == itemno) { sum = j; break; } } } if (sum != -1){ for (var i = 0; i < this.xzdcai.length; i++) { if (this.xzdcai[i].itemno == itemno) { this.xzdcai[i].itemcount=res.value break; } } }else{ this.xzdcai.push(o) } this.getAllCount=0 this.sumPrice=0 this.xzdcai.forEach((food) => { this.getAllCount += parseFloat(food.itemcount) this.sumPrice += parseFloat(food.itemcount)*parseFloat(food.price) })生成的this.xzdcai为重组数组