Группировка по ID, затем по Date, затем суммирование Values

Для LeadProm

by Alexander Lashchevsky

HTML

<div class="container">
	<div class="block">
		<div class="id">1</div>
		<div class="date">02/21/2015</div>
		<div class="value">111</div>
		<div class="value2">8</div>
	</div>
	<div class="block">
		<div class="id">1</div>
		<div class="date">02/21/2015</div>
		<div class="value">222</div>
		<div class="value2">88</div>
	</div>
	<div class="block">
		<div class="id">1</div>
		<div class="date">02/30/2015</div>
		<div class="value">333</div>
		<div class="value2">344</div>
	</div>
	<div class="block">
		<div class="id">1</div>
		<div class="date">02/30/2015</div>
		<div class="value">444</div>
		<div class="value2">654</div>
	</div>
	<div class="block">
		<div class="id">2</div>
		<div class="date">05/17/2015</div>
		<div class="value">555</div>
		<div class="value2">46</div>
	</div>
</div>

JavaScript

$(function () {
	var $container = $('.container'),
		$blocks = $container.find('.block'),
		results = {},
		output = '';

	$blocks.each(function () {
		var $this = $(this),
			id = $this.find('.id').html(),
			date = $this.find('.date').html(),
			value1 = $this.find('.value').html(),
			value2 = $this.find('.value2').html();

		results[id] = results[id] || {};
		results[id][date] = results[id][date] || {};
		results[id][date].field1 = (results[id][date].field1 || 0) + parseInt(value1);
		results[id][date].field2 = (results[id][date].field2 || 0) + parseInt(value2);
	});

	$.each(results, function (id, dates) {
		var count = Object.keys(dates).length;

		$.each(dates, function (date, value) {
			output += '<div class="block">' +
				'<div class="id">' + id + '</div>' +
				'<div class="date">' + date + '</div>' +
				'<div class="value">' + value.field1 + '</div>' +
				'<div class="value2">' + Math.round(value.field2 / count) + '</div>' +
				'</div>';
		});
	});

	$container.html(output);
});