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>