2014-06-18 14 views
5

Tôi có một mảng các đối tượng đó trông giống như sau:bản sao phát hiện trong mảng của các đối tượng javascript

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

Tôi muốn sử dụng javascript/jquery để lặp qua chúng để kiểm tra xem có bất kỳ bản sao trong màu và nếu có bản sao, tại đây '72C380' xảy ra hai lần. Sau đó, chỉ nên có một mục nhập nhưng giá trị của chúng sẽ được tổng hợp.

mong muốn Output:

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

Tôi biết làm thế nào để làm điều đó trong python, nhưng không JS

+0

Bạn có muốn xóa nó không? – M98

+0

Tôi muốn xóa các bản sao trùng lặp nhưng thêm giá trị upp –

Trả lời

8

Bạn có thể sử dụng một bản đồ tạm thời như

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 này: Fiddle

0

điều khiển ...

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); 
Các vấn đề liên quan