3

I'm working in wso2 carbon dashboard. My table is containing 2 fields (Name and Number). I Have duplicate name in the objects but with different number. I want unique name with addition of numbers.

[
        {
        "Name":"Abc",
        "number":2
        },
        {
        "Name":"bcd",
        "number":3
        },
        {
        "Name":"Abc",
        "number":5
        }

]

expected output

[
{
"name":"Abc",
"Number":7
},
{
"name":"bcd",
"Number":3
}
]

I'm using java script to achieve such task. please help me

  • 1
    Possible duplicate of [What is the most efficient method to groupby on a javascript array of objects?](http://stackoverflow.com/questions/14446511/what-is-the-most-efficient-method-to-groupby-on-a-javascript-array-of-objects) – Andreas Jan 10 '17 at 07:19
  • Can you please suggest simple code. I'm new to js @Andreas –  Jan 10 '17 at 07:21

1 Answers1

2

Use Array#reduce method with a reference object.

var data = [{
  "Name": "Abc",
  "number": 2
}, {
  "Name": "bcd",
  "number": 3
}, {
  "Name": "Abc",
  "number": 5
}];

// object for index reference
var ref = {};

// iterate and generate the array
var res = data.reduce(function(arr, o) {
  // check index already defined
  if (!(o.Name in ref)) {
    // if not defined then define index
    ref[o.Name] = arr.length;
    // and push the element
    // you can also use 
    // arr.push({Name:o.Name, number:o.number});
    arr.push(Object.assign({}, o));
  } else {
    // if index already defined update the number
    arr[ref[o.Name]].number += o.number;
  }
  // return the array reference
  return arr;
  // set initial value as empty array
}, []);

console.log(res);
Pranav C Balan
  • 113,687
  • 23
  • 165
  • 188