数组的应用

一、买一赠一

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
    	break
    }
}
// -- 获取需要更改的对象如果含有特殊商品
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)
}

排序(根据单价排序)
1,获取数组里面所有的数量
2.计算数量的一半
3.拿到一半时的索引值
4.判断此索引值的数量是否刚好等于需要总数量的一半
5.移除索引值之前的(如果第4步,不是刚好一半,需添加该索引值下的商品,及计算数量)

二、合并数组中属性相同的项

  this.list = [//需要的进行合并的原数组]; 
  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,
             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=lists

1,将数组两次循环,得到相同的项的索引,
2,将索引从大到小排列
3,移除重复的索引项
四、根据数组中的某一个字段去重,数量+1

let lists =[需要处理的数组]
this.list=lists 
for (let i = 0; i < lists.length; i++) {
  	for (let j = lists.length - 1; j > i; j--) {
  		if (lists[i].collection_id == lists[j].collection_id) {   
  			lists[i].num =parseInt(lists[i].num)+1;
  			this.list.splice(j,1);
  		}
  	}
    }```

1,将数组两次循环,得到相同的项的索引,
2,根据某一字段判断,数量+1
3,利用splice将后面的删除

五、类似点单重组数组

var o={
	itemno:'12',
	itemcount:1,
	itemname:'香蕉',
	price:12
}
let sum = -1;
if (this.arry.length > 0) {
	for (var j = 0; j < this.arry.length; j++) {
		if (this.xzdcai[j].itemno == itemno) {
			sum = j;
			break;
		}
	}
}
if (sum != -1){
	for (var i = 0; i < this.arry.length; i++) {
		if (this.arry[i].itemno == itemno) {
			this.arry[i].itemcount=res.value
			break;
		}
	}
}else{
	this.arry.push(o)
}
this.getAllCount=0
this.sumPrice=0
this.arry.forEach((food) => {
	this.getAllCount += parseFloat(food.itemcount) 
	this.sumPrice += parseFloat(food.itemcount)*parseFloat(food.price)
})```

this.arry为重组数组
六、数组去重

1,根据某一个字段
  quchong (arr, val) {
	const res = new Map()
	  return arr.filter((item) => !res.has(item[val]) && res.set(item[val], 1))
 },
this.newarr=this.quchong(arr, "字段名")
2,整个对象相同去重
that.arr= [...new Set(that.arr)]

七、数组拷贝

var a=[]
var b=[{name:'11',age:'11'}]
//第一种:直接赋值
a=b   
//第二种:for循环
for(let i in b){
a.push(b[i])
}    
//第三种:concat方法
a=[].concat(b)
第四种:slice方法
a=b.slice(0)

a[0].age='22'
//此时以上四种方式赋值之后,a数组和b数组都将被改变
//因此以上四种方式只能对不包含引用对象的一维数组进行深拷贝
//使用JSON.stringify和JSON.parse实现深拷贝
方法五:
a=JSON.parse(JSON.stringify(b))
当a的某一项被改变时,b将保持原有数据
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值