Отключить вывод d3.group или d3.rollup? - PullRequest
0 голосов
/ 05 июля 2019

Я использую d3-array rollup для выполнения групповой операции подсчета, как при подготовке к созданию таблицы HTML.

У меня есть переменное количество ключей группировки, которые я передаю вот так:

var rollup_keys = new Map([
        ['count', v => v.length],
        ['codeversion', d => d.codeversion],
        ['mode', d => d.mode],
        ['status', d => d.status]])

    var data_counts = d3.rollup(all_data, ...rollup_keys.values())

Это дает мне вложенные Карты, например, псевдопредставление,

Map(3) {"codeversion_1" => 
    Map(1) {"mode_1" => 
        Map(2) {"status_1" => count_1,
                "status_2" => count_2},
       "codeversion_2" =>
    Map(1) {"mode_1" =>
        Map(2) {"status_1" => count_1,
                "status_2" => count_2}
    [...truncated...]
}             

Я использую циклы for Vue.js для рендеринга таблицы HTML, что означает, что ее проще всего иметьплоское представление вышеуказанной вложенной карты.Что-то вроде ::

[
    ["codeversion_1", "mode_1", "status_1", 1"],
    ["codeversion_1", "mode_1", "status_2", 49],
    ["codeversion_2", "mode_1", "status_1", 3],
    ["codeversion_2", "mode_1", "status_2", 7],
]

Чтобы преобразовать вложенные карты в вышеприведенный формат плоского списка, я использую этот рекурсивный подход:

flatten_data: function(flatten_me){
                let rows = []
                if ( flatten_me instanceof Map) {
                    for (let [key, value] of flatten_me.entries()) {
                        if (value instanceof Map) {
                            let _rows = this.flatten_data(value)
                            for (_row of _rows) {
                                rows.push([key].concat(_row))
                            }
                        } else {
                            rows.push([key, value])
                        }
                    }
                }
                return rows
            }

Но есть ли что-то встроенное в d3-массивэто означало бы, что я не должен был бы сгладить это сам?Мне кажется, что я упускаю что-то очевидное, но поиски flatten array не дают полной перестановки ключ-значение, которую я ищу.

...