如何在crossfilter.js中参数化对象的属性?

时间:2017-03-28 14:15:41

标签: javascript jquery crossfilter

我正在尝试使用Crossfilter.js生成图表,使用将传递给图表方法的数据。这是我正在使用的代码:

function makeChart(data) {
    var dataCrossfilter = crossfilter(data);
    var chartOrderDim = dataCrossfilter.dimension(function (d) {
        return d.ChartOrder;
    });
    var chartDataGroup = chartOrderDim.group();
    var barChart = dc.barChart("#chartExample2");
}

我遇到的问题是,在这个例子中,我知道我发送给这个方法的数据是什么,所以当我去创建维度时,我正在返回

d.ChartOrder

因为我知道ChartOrder是数据的属性之一。例如,数据是:

var data = [
    {ChartId: 1, ChartOrder: 1, ChartName: "Test1"},
    {ChartId: 2, ChartOrder: 2, ChartName: "Test2"},
    {ChartId: 3, ChartOrder: 3, ChartName: "Test3"},
    {ChartId: 4, ChartOrder: 4, ChartName: "Test4"},
    {ChartId: 5, ChartOrder: 3, ChartName: "Test5"},
    {ChartId: 6, ChartOrder: 1, ChartName: "Test6"},
    {ChartId: 7, ChartOrder: 2, ChartName: "Test7"}
    ]; 

我的问题是,有没有办法参数化d.ChartOrder?假设我正在向此发送数据,我还想告诉维度返回哪个键?例如:

function makeChart(data, dimensionProperty) {
    var dataCrossfilter = crossfilter(data);
    var chartOrderDim = dataCrossfilter.dimension(function (d) {
        return d.dimensionProperty;
    });
    var chartDataGroup = chartOrderDim.group();
    var barChart = dc.barChart("#chartExample2");
}

如何使这项工作?如果我将dimensionProperty作为带有“ChartOrder”值的字符串发送,则它不起作用。有没有办法发送这个函数我希望它从维度返回的数据属性?

1 个答案:

答案 0 :(得分:1)

使用d[dimensionProperty]访问dimensionProperty而不是使用点表示法。

然后,您将把“ChartOrder”作为第二个参数的字符串传递给您的函数:

function makeChart(data, dimensionProperty) {
    var dataCrossfilter = crossfilter(data);
    var chartOrderDim = dataCrossfilter.dimension(function (d) {
        return d[dimensionProperty];
    });
    var chartDataGroup = chartOrderDim.group();
    var barChart = dc.barChart("#chartExample2");
}