我正在使用javascript。
这是我的数组
var a=[
{
"P_NAME":"TESTNAME",
"QTY":2
},
{
"P_NAME":"TESTNAME2",
"QTY":3
},
{
"P_NAME":"TESTNAME",
"QTY":5
}
]
我想合并重复项,但总结一下他们的贡献。结果如下:
[
{
"P_NAME":"TESTNAME",
"QTY":7
},
{
"P_NAME":"TESTNAME2",
"QTY":3
}
]
答案 0 :(得分:0)
您可以通过以下方式执行此操作
var a=[
{
"P_NAME":"TESTNAME",
"QTY":2
},
{
"P_NAME":"TESTNAME2",
"QTY":3
},
{
"P_NAME":"TESTNAME",
"QTY":5
}
];
let map = {};
a = a.filter(function(element, idx){
if(map[element['P_NAME']] !== undefined){
a[map[element['P_NAME']]].QTY += element.QTY;
return 0;
}
map[element['P_NAME']] = idx;
return 1;
})
console.log(a);

我使用了Array.filter(),我使用一个对象作为地图来引用任何元素的第一个匹配项,如果之前已经发生过,我将QTY添加到该idx并过滤掉该元素
答案 1 :(得分:0)
您可以使用#forEach()
及其此参数作为hashmap
对结果进行分组 - 请参阅下面的演示:
var a=[{"P_NAME":"TESTNAME","QTY":2},{"P_NAME":"TESTNAME2","QTY":3},{"P_NAME":"TESTNAME","QTY":5}];
var result=[];
a.forEach(function(e){
if(this[e["P_NAME"]]) {
this[e["P_NAME"]]["QTY"] += e["QTY"];
} else {
this[e["P_NAME"]] = e;
result.push(this[e["P_NAME"]]);
}
}, Object.create(null));
console.log(result);

.as-console-wrapper{top:0;max-height:100%!important;}

答案 2 :(得分:0)
首先,您的JSON无效,请按以下方式更正
[ { " P_NAME":"测试名&#34 ;, " QTY":2
}, { " P_NAME":" TESTNAME2&#34 ;, " QTY":3
}, { " P_NAME":"测试名&#34 ;, " QTY":5
} ];
然后,你可以这样做,
var a=[
{
"P_NAME":"TESTNAME",
"QTY":2
},
{
"P_NAME":"TESTNAME2",
"QTY":3
},
{
"P_NAME":"TESTNAME",
"QTY":5
}
];
var temp = {};
var obj = null;
for(var i=0; i < a.length; i++) {
obj=a[i];
if(!temp[obj.P_NAME]) {
temp[obj.P_NAME] = obj;
} else {
temp[obj.P_NAME].QTY += obj.QTY;
}
}
var result = [];
for (var prop in temp)
result.push(temp[prop]);
console.log(result);
&#13;