Я использую код для удаления дубликатов, как описано здесь: jQuery Remove Duplicate Elements. Он отлично работает, но я не могу найти код, чтобы показать количество раз, когда дубликат был удален для каждого элемента. Я думаю, что это довольно просто, но я не очень опытен с jquery.
var seen = {};
var counter = {};
var length = $('#links1 a, #links2 a').length;
console.log(length);
$('#links1 a, #links2 a').each(function(i) {
var txt = $(this).text();
if(seen[txt]){
$(this).remove();
counter[txt]++;
}
else{
seen[txt]=true;
counter[txt] = 1;
}
if(i==(length-1)){
$.each(counter , function(i, val) {
$('a:contains('+i+')').html(i+' ('+val+')')
});
}
});
Теперь он правильно распечатывает: - Пункт 1 (4) - Пункт 2 (1) - Пункт 3 (5)
Где число между скобками - это количество раз, когда оно было удалено (+1).
Вот рабочий скрипт
var seen = {};
var counter = {};
var length = $('#links1 a, #links2 a').length; //Length of <a> elements
console.log(length);
$('#links1 a, #links2 a').each(function(i) {
var txt = $(this).text();
if(seen[txt]){
$(this).remove();
counter[txt]++;
}
else{
seen[txt]=true;
counter[txt] = 1;
}
if(i==(length-1)){ //Last iteration
$.each(counter , function(i, val) {
$('p#first').append('<p>'+i+': '+val+'</p>'); //Print Text and its Occurence.
});
}
});
Вам просто нужно было распечатать все значения и индексы после последней итерации.
Хорошо, я бы рекомендовал вам создать дополнительный Array
который учитывает дубликаты для каждого text
counters = Array();
if (seen[txt]) {
$(this).remove();
count++;
counters[txt]++;
} else {
seen[txt] = true;
counters[txt] = 1;
}