Как добавить результат фильтра, чтобы выбрать меню - PullRequest
0 голосов
/ 16 декабря 2018

Я застрял в своем первом проекте панели инструментов с d3, dc и crossfilter.Не могу найти решение.

"ETCBTC","BUY","0.002325","1.04","0.00241800","0.00104","ETC"
"ETCBTC","SELL","0.002358","1.04","0.00245232","0.00000245","BTC"
"LTCETH","SELL","0.30239","0.006","0.00181434","0.00000181","ETH"
"LTCETH","SELL","0.30239","0.149","0.04505611","0.00004506","ETH"

У меня есть разные торговые пары в первом столбце, и из этого мне нужно использовать только последнюю пару BTC и ETH в этом примере.

Я нашел фильтр, которыйпомогает мне сделать это.

Дело в том, что в моем меню выбора должны быть BTC и ETH, которые могут применять фильтр.

function show_market_selector(ndx) {
    var marketDim = ndx.dimension(dc.pluck("Market"));
    var selectorMenu = marketDim.group();

    function filterItems(query) {
        return ndx.dimension(dc.pluck("Market")).filter(function(el) {
            return el.toLowerCase().indexOf(query.toLowerCase()) > 0;

        });
    }
    filterItems("BTC");
    var select = dc.selectMenu("#market-selector")
                    .dimension(marketDim)
                    .group(selectorMenu);

    select.title(function (d){
        return "BTC";
    });

}

Теперь я получаю все пары в группе в этом меню.Но моя цель - просто включить BTC и ETH в меню выбора.

Я надеюсь, что кто-то может дать мне совет.Спасибо.

1 Ответ

0 голосов
/ 17 декабря 2018

Я думаю, что было бы проще использовать валюту в качестве ключа измерения:

var currencyDim = ndx.dimension(d => d.Market.slice(3)),
    currencyGroup = marketDim.group();
var select = dc.selectMenu("#market-selector")
                .dimension(currencyDim)
                .group(currencyGroup);

Вы не хотите создавать новое измерение каждый раз, когда вызывается filterItems - измерения тяжелыеиндексы веса, которые предназначены для хранения.

Название dimension.filter() сбивает с толку - это не что иное, как Array.prototype.filter() JavaScript, который возвращает соответствующие строки.Вместо этого это императивная функция, которая устанавливает текущий фильтр для этого измерения (и изменяет то, что видят все другие измерения).

Если вам нужно измерение "из валюты", это будет

var fromCurrencyDim = ndx.dimension(d => d.Market.slice(0,3))
...