Как установить счетчик в ноль для отсутствующих ключей в D3 Nest ()

Есть несколько небольших проблем с вашим кодом. Тот, который кусает вас прямо сейчас, заключается в том, что вы не очищаете тайм-аут BBB при входе в AAA. Вы можете исправить это, добавив обработчик clearTimeout в обработчик mouseover AAA.

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

Наконец, хотя это скорее всего проблема только в вашем примере кода, вы пропускаете time в глобальный объект. ; -)

Попробуйте это вместо:

$(document).ready(function() {
    var time;

    function show() {
        $("BBB").css({'display':'block'});
    }

    $("AAA").each(function() {
        $(this).mouseover(function() {
            clearTimeout(time);
            show();
        });

        $(this).mouseleave(function() {
            clearTimeout(time);
            time = setTimeout("hide()", 200);
        });

        $("BBB").mouseleave(function() {
            clearTimeout(time);
            time = setTimeout("hide()", 200);
        });

        $("BBB").mouseenter(function() {
            clearTimeout(time);
        });
    });
});

function hide() {
    $("BBB").css({'display':'none'});
}
1
задан altocumulus 18 January 2019 в 10:39
поделиться

1 ответ

Причина в том, что те комбинации года / статуса, которые должны были бы создавать записи с values: 0, не существуют в исходных данных. d3 только повторяет существующих комбинаций ...

Таким образом, вам придется заполнить пробелы своим собственным кодом. Это можно сделать разными способами. Один из них состоит в цепочке .map, которая добавляет пропущенную запись values при необходимости:

d3.csv("https://raw.githubusercontent.com/benubah/rconsortium_projects/master/test.csv")
  .then(function(data) {
    var stat = d3.nest()
      .key(d => d.Year)
      .key(d => d.Status) 
      .rollup(v => v.length)
      .entries(data)
      .map(function (obj) {
           if (obj.values.length === 1) {
               if (obj.values[0].key == "Completed") {
                   obj.values.unshift({ key: "InProgress", values: 0 });
               } else {
                   obj.values.push({ key: "Completed", values: 0 });
               }
           }
           return obj;
      });
      
    console.log(stat);
  });
<script src="https://d3js.org/d3.v5.js"></script>

0
ответ дан trincot 18 January 2019 в 10:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: