2017-09-02 119 views
-1

我正在使用的JavaScript。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

有不重复 – Sajeetharan

+2

欢迎的StackOverflow! 你到目前为止尝试过什么吗? StackOverflow不是一个免费的代码写入服务,并且期待你 [尝试先解决你自己的问题](http://meta.stackoverflow.com/questions/261592)。 请更新您的问题,以显示您已经尝试过的内容,显示您在 [最小,完整和可验证示例](http://stackoverflow.com/help/mcve)中遇到的具体问题。 欲了解更多信息,请参阅 [如何问一个好问题], 并采取 [网站之旅](http:// http:// stackoverflow.com/tour) –

+0

@sarankani做了答案帮助? – Sajeetharan

回答

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并将该元素过滤掉

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;}

0

所有的JSON首先是无效的,正确的是如下,

[ { “P_NAME”: “测试名”, “QTY”:2
},{ “P_NAME”: “TESTNAME2”, “QTY”:3
},{ “P_NAME”: “测试名”, “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);