Циклы вложены неправильно. Ваш подход должен состоять в том, чтобы через l oop проходить через организации и для каждой организации, сколько посетителей:
jQuery(document).ready(function() {
reporgs();
//find represented sponsors
function reporgs() {
jQuery('#org01 tr').each(function() {
var count=0;
var right_cols = jQuery(this).find("td:nth-child(1)");
jQuery('#attendee01 tr:visible').each(function() {
var row = jQuery(this);
var left_cols = jQuery(this).find("td:nth-child(3)");
if (left_cols.html() == right_cols.html()) {
count++;
}
});
right_cols.css('color', 'red');
right_cols.append(" <b>" + count + "</b>");
});
}
});
Однако, это не самый эффективный подход, так как вы проходите через n
посетителя на каждую m
организацию, что делает сложность времени O(n*m)
. Вместо этого вы можете сделать это линейным, просматривая участников всего один раз, подсчитывая общее количество участников. Затем вы можете l oop пройти через орг только один раз и извлечь те подсчеты, которые уже были рассчитаны:
jQuery(document).ready(function() {
const counts = {};
jQuery('#attendee01 tr:visible').each(function() {
const org = jQuery(this).find("td:nth-child(3)").text();
counts[org] = (org in counts) ? (counts[org] + 1) : 1;
});
jQuery('#org01 tr').each(function() {
const right_col = jQuery(this).find("td:nth-child(1)");
const org = right_col.text();
const count = counts[org] || 0;
right_col
.css('color', 'red')
.append(" <b>" + count + "</b>");
});
});