Количество экземпляров термина в .each - PullRequest
1 голос
/ 31 января 2020

У меня есть этот код, который сравнивает значения из одной таблицы в другую и добавляет класс, если он существует, и эта часть работает. Теперь я хочу показать, сколько раз значение существует. Я пробовал инкрементный счет ++, но цифры выключены.

function reporgs() {
  jQuery('#attendee01 tr:visible').each(function() {
 var count=0;
    var row = jQuery(this);
    var left_cols = jQuery(this).find("td:nth-child(3)");

    jQuery('#org01 tr').each(function() {

      var right_cols = jQuery(this).find("td:nth-child(1)");
      if (left_cols.html() == right_cols.html()) {
          count++;
        right_cols.css('color', 'red');
        right_cols.append(" <b>" + count + "</b>");
      }
    });
  });
}

См. Скрипку https://jsfiddle.net/zjsLqxwp/1/

Спасибо всем

Ответы [ 2 ]

0 голосов
/ 31 января 2020

Как насчет более простого подхода? Может быть, просто используйте селектор, чтобы сопоставить элементы, и пусть Javascript подсчитывает вхождения для вас.

jQuery(document).ready(function() {
  jQuery("#org01 td").each(function() {
    var length = jQuery("#attendee01 td:contains(" + jQuery(this).html() + ")").length;
    if (length > 0) {
        jQuery(this).css("color","red");
        jQuery(this).append(" " + length);
    }
  });
});
0 голосов
/ 31 января 2020

Циклы вложены неправильно. Ваш подход должен состоять в том, чтобы через 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>");
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...