JS实现一个Json对象根据多个Key合并,并且实现数据累加

本文介绍了一种使用JavaScript实现的复杂数据处理方法,通过合并具有相同companyName、spec和svg属性的Json对象,实现了orderAmt和Qty字段的累加,并统计了累加次数。示例展示了如何遍历原始数据,比较元素并更新结果集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JS实现一个Json对象根据多个Key合并,并且实现数据累加

原数据如下:

var data = 
		[{"companyName": "A","orderAmt": 100,"Qty": 1,"spec": "800*600","svg": ""},
		 {"companyName": "A","orderAmt": 100,"Qty": 1,"spec": "800*600","svg": ""},
		 {"companyName": "A","orderAmt": 200,"Qty": 3,"spec": "800*600","svg": "*"},
		 {"companyName": "A","orderAmt": 200,"Qty": 3,"spec": "800*600","svg": "*"},
		 {"companyName": "B","orderAmt": 400,"Qty": 5,"spec": "700*500","svg": ""},
		 {"companyName": "B","orderAmt": 200,"Qty": 5,"spec": "700*500","svg": ""},
		 {"companyName": "B","orderAmt": 200,"Qty": 5,"spec": "700*500","svg": ""}
		];

根据 companyName,spec 和 svg 合并,如果这三个相同,则实现 orderAmt和Qty累加,并且统计出累加的数量
合并后的数据:

[{"companyName":"A","orderAmt":200,"Qty":2,"spec":"800*600","svg":"","number":2},
{"companyName":"A","orderAmt":400,"Qty":6,"spec":"800*600","svg":"*","number":2},
{"companyName":"B","orderAmt":800,"Qty":15,"spec":"700*500","svg":"","number":3}]

js代码如下所示:

<script type="text/javascript">
		var data = 
		[{"companyName": "A","orderAmt": 100,"Qty": 1,"spec": "800*600","svg": ""},
		 {"companyName": "A","orderAmt": 100,"Qty": 1,"spec": "800*600","svg": ""},
		 {"companyName": "A","orderAmt": 200,"Qty": 3,"spec": "800*600","svg": "*"},
		 {"companyName": "A","orderAmt": 200,"Qty": 3,"spec": "800*600","svg": "*"},
		 {"companyName": "B","orderAmt": 400,"Qty": 5,"spec": "700*500","svg": ""},
		 {"companyName": "B","orderAmt": 200,"Qty": 5,"spec": "700*500","svg": ""},
		 {"companyName": "B","orderAmt": 200,"Qty": 5,"spec": "700*500","svg": ""}
		];

		sum(data);
		function sum(data) {
			var result = [];
			var newData = data;
			var delData = [];
			data1:
				for (var i in data) {
					var json = data[i];
					var countAmt = data[i].orderAmt;
					var countQty = data[i].Qty;
					var number = 1;
					data2:
						for (var j in newData) {
							if (delData != null) {
								for (var h in delData) {
									if (i == delData[h]) {
										continue data1;
									}
									if (j == delData[h]) {
										continue data2;
									}
								}
							}
							if (i != j && data[i].companyName == newData[j].companyName &&
								data[i].svg == newData[j].svg &&
								data[i].spec == newData[j].spec ) {
								delData.push(j);
								number++;
								countAmt += newData[j].orderAmt;
								countQty += newData[j].Qty;
							}
						}
					json.Qty = countQty;
					json.orderAmt = countAmt;
					json.number = number;
					result.push(json);
				}
				console.log(result);
			return result;
		}
	</script>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值