Javascript使用删除重复和总结

时间:2017-09-02 08:13:45

标签: javascript arrays

我正在使用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   
        }

    ]

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;
&#13;
&#13;