@ennet

Как найти количество общих элементов?

Всем привет! Есть набор div элементов с атрибутами data-service_id и data-service_model (тип модели). У каждого типа модели есть id услуги. Этот id может повторяться. С кодом думаю будет нагляднее:

<div class="item" data-service_id="1" data-service_model="cover">Разный</div>
<div class="item" data-service_id="15" data-service_model="cover">Одинаковый</div>
<div class="item" data-service_id="15" data-service_model="cover">Одинаковый</div>


<div class="item" data-service_id="1" data-service_model="services">Разный</div>
<div class="item" data-service_id="10" data-service_model="services">Одинаковый</div>
<div class="item" data-service_id="10" data-service_model="services">Одинаковый</div>


<div class="item" data-service_id="5" data-service_model="service-Option">Разный</div>
<div class="item" data-service_id="8" data-service_model="service-Option">Одинаковый</div>
<div class="item" data-service_id="8" data-service_model="service-Option">Одинаковый</div>

Хотелось бы вывести все дубли и не дубли в массив типа :
[{"service_model": "cover", "service_id": "15", "count": "2"}, {"service_model": "service", "service_id": "1", "count": "1"}, ... ]

То есть посчитать кол-во одинаковый по id и service_model , но и выводить кол-во даже если один элемент.

Я делала выборку всех элементов и по .each получала каждый элемент, но как считать кол-во вхождений не могу понять(((

Не хотелось бы выбирать конкретно по id , так как параметр меняется. Подскажите как лучше сделать? Спасибо!
  • Вопрос задан
  • 187 просмотров
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 1
@LeSDav
Веб-разработчик
Если в результате вы готовы получить не массив объектов, а объект с объектами, то могу предложить следующий вариант решения вашей задачи:

var itemsResult = {};
	items = document.querySelectorAll('.item');
	
	for (var i = 0; i < items.length; i++) 
	{
		var currUID = items[i].dataset.service_model+items[i].dataset.service_id;
		
		if (typeof(itemsResult[currUID]) == 'object')
		{
			itemsResult[currUID].count++;
		}
		else
		{
			itemsResult[currUID] = 
			{  
				"service_model": items[i].dataset.service_model, 
				"service_id": items[i].dataset.service_id, 
				"count": 1
			};
		}
	}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы