2017-09-02 52 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);