Я хочу уменьшить свой массив объектов, сравнивая предыдущий и текущий объект из массива, если идентификатор предыдущего объекта отличается от текущего объекта, тогда я записываю предыдущий объект в свой список результатов и заменяю его текущим объектом, иначе я суммирую значения обоих объектов. В итоге это должен быть уменьшенный массив, без дубликатов.
У меня есть такие данные:
[{
Clicks: 210,
Company: "A",
_id: { CompanyID: 5 }
},
{
Clicks: 35,
Company: "C",
_id: { CompanyID: 3 }
},
{
Clicks: 15,
Company: "B",
_id: { CompanyID: 2 }
},
{
Clicks: 13,
Company: "A",
_id: { CompanyID: 5 }
}]
И хочу свести его к такому виду:
[{
Clicks: 223,
Company: "A",
_id: { CompanyID: 5 }
},
{
Clicks: 35,
Company: "C",
_id: { CompanyID: 3 }
},
{
Clicks: 15,
Company: "B",
_id: { CompanyID: 2 }
}]
Вот мое не правильно работающее решение:
$scope.reduce = function () {
var result = [];
var prev = null;
angular.forEach($scope.data, function (value, key) {
if (prev != null) {
if (prev._id.CompanyID != value._id.CompanyID) {
result.push(prev);
prev = value;
} else {
prev.Clicks += value.Clicks;
}
} else {
prev = value;
}
});
}
Мой результат выглядит хорошо, он уменьшает все дубликаты, но не суммирует значения объектов с одинаковыми идентификаторами, он просто переопределяет идентификаторы с последним объектом.