5

I have an array of objects that looks like the following:

            {value: 20, color: 'F88C00'},
            {value: 40, color: 'D8605F'},
            {value: 20, color: '72C380'},
            {value: 20, color: '2C7282'},
            {value: 20, color: '72C380'}

I want to use javascript/jquery to loop through them to check if there are any duplicates in the color column, and if there are duplicates, here '72C380' occurs twice. Then there should be only one entry but their values should be summed.

Desired Output:

            {value: 20, color: 'F88C00'},
            {value: 40, color: 'D8605F'},
            **{value: 40, color: '72C380'},**
            {value: 20, color: '2C7282'}

I know how to do that in python, but not JS

kmario23
  • 57,311
  • 13
  • 161
  • 150
Rahul Bhatia
  • 1,005
  • 2
  • 13
  • 18

2 Answers2

8

You can use a temp map like this

var array = [{
    value: 20,
    color: 'F88C00'
}, {
    value: 40,
    color: 'D8605F'
}, {
    value: 20,
    color: '72C380'
}, {
    value: 20,
    color: '2C7282'
}, {
    value: 20,
    color: '72C380'
}];

var op = [],
    map = {}, it, item;
for (var i = 0; i < array.length; i++) {
    it = array[i];
    item = map[it.color];
    if (item) {
        item.value += it.value;
    } else {
        map[it.color] = item = {
            value: it.value,
            color: it.color
        };
        op.push(item);
    }
}
console.log(op)

Demo: Fiddle

Arun P Johny
  • 384,651
  • 66
  • 527
  • 531
0

console it ...

var collection = [{value: 20, color: 'F88C00'},
            {value: 40, color: 'D8605F'},
            {value: 20, color: '72C380'},
            {value: 20, color: '2C7282'},
            {value: 20, color: '72C380'}];


var colors = [];
var result = collection;
$.each(result, function(i, item){ 
  if(colors.indexOf(item.color)!= -1){ 
      $.each(result,function(f, find){
        if(find.color == item.color){
          result[f].value += item.value;
        }
      })
      delete result[i];
  }else{
     colors.push(item.color);  
  } 
})
var colors = [];
console.log(result);
Anil Gupta
  • 2,329
  • 4
  • 24
  • 30