Тут конечно много вариантов, лучше в целом переписать на чем-нить реакт подобном и сравнивать по данным перед рендером. Но если ваш пример, то можно использовать те же dataset поля чтобы проверять что уже добавлен такой.
В моем примере я проверяю просто категорию, вы уже сами добавите нужные вам доп проверки
/* Добавляем в li dataset поле category-id в котором будем хранить категорию
По желанию добавляешь и другие
а если подкатегории входят в категорию и каждая имеет только одного родителя то можно обойтись одной подкатегорией
*/
$("#categoryAll").append(
`<li class="flex group-form-elements" data-category-id="${cat1}">
<div>
<input type="hidden" name="incidentmain[]" value="${cat1}" class="incedentSelected">
<span>${txt1}</span>
</div>
<div>
<input type="hidden" name="incidentsubcategory[]" value="${cat2}" class="subcatSelected">
<span>${txt2}</span>
</div>
<div>
<input type="hidden" name="IncidentDetection[]" value="${cat3}">
<span>${txt3}</span>
</div>
<div>
<span class="delCategory button delete">Удалить</span>
</div>
</li>`
);
Ну и в самом коде в проверках ваших делаем запрос, если такой элемент находится обрубаем исполнение
if ( document.querySelector(`[data-category-id="${cat1}"]`)) {
alert("Такую категорию уже добавляли");
return false;
}
Весь пример, дальше дорабатывайте под себя: