Saya mencoba menulis fungsi di d3 yang akan memeriksa "waktu" data saya dan melihat apakah itu di antara dua waktu lainnya, dan memfilternya.

//start with a function to check if time for each data point is in between two other times
function timeInterval(data, start, end) {
    var time = data.Time

    if (start <= time <= end) {           
        return "inline";
    } else {
        return "none";
    };   
 }

//set the display of points to either inline or none
function updateTime(value) {
d3.selectAll(".events")
    .style("display", timeInterval("20:00", "24:00"));    
}


//When radio button on, call updateTime function
d3.selectAll("#timeFilterRadioButton").on("change", function() {
updateTime()
});

Masalah saya adalah saya tidak dapat memanggil timeInterval dengan parameter awal dan akhir. Memanggil timeInterval("20:00", "24:00") menghasilkan waktu yang tidak ditentukan. Satu-satunya cara agar saya berhasil meneruskan data adalah jika saya memanggil fungsi tanpa parameter apa pun:

 function updateTime(value) {
     d3.selectAll(".events")
        .style("display", timeInterval); //calling timeInterval in this manner, I'm able to console.log the time property of the data   
 }

Ingin tahu di mana saya salah di sini. Terima kasih.

3
DiamondJoe12 7 Agustus 2019, 09:04

1 menjawab

Jawaban Terbaik

Cukup gunakan fungsi anonim untuk mendapatkan data dan bungkus fungsi timeInterval Anda di dalamnya:

function updateTime(value) {
    d3.selectAll(".events")
        .style("display", function(d) {
            //your datum is here---^
            return timeInterval(d, "20:00", "24:00")
            //use it here-------^
        });
};

Tidak terkait, tetapi ini:

if (start <= time <= end)

Akan mengembalikan true untuk semua start <= time, terlepas dari end.

3
Gerardo Furtado 7 Agustus 2019, 06:25