D3 js从包含特定键值的对象获得d3.max

时间:2017-03-21 14:32:19

标签: javascript d3.js dataset

我有以下数据集,并且我试图让d3.max为比例指定一个域,但是只希望d3.max值来自具有key enabled = true的对象。如何实现这一目标?

[{
    "key": "name1",
    "enabled": "true",
    "values": [{
        "date": "2016-09-13T02:11:44Z",
        "value": "100",
    }, {
        "date": "2016-09-13T02:11:44Z",
        "value": "200",
    }]
}, {
    "key": "name2",
    "enabled": "false",
    "values": [{
        "date": "2016-09-13T02:11:44Z",
        "value": "400",
    }, {
        "date": "2016-09-13T02:11:44Z",
        "value": "500",
    }]
}]

我想我应该以某种方式使用密钥,但是没有能够做到这一点。有人能指出我正确的方向吗?这就是我到目前为止......

d3.max(dataset, function(c) { return d3.max(c.values, function(d) { return d.value; }); })

1 个答案:

答案 0 :(得分:2)

如果你想要一行:

var max = d3.max(data.filter(d => d.enabled === "true"), e => d3.max(e.values, f => f.value));

或者,没有箭头功能:

var max = d3.max(data.filter(function(d) {
    return d.enabled === "true";
}), function(e) {
    return d3.max(e.values, function(f) {
        return f.value;
    });
});

这是一个演示:

var data = [{
  "key": "name1",
  "enabled": "true",
  "values": [{
    "date": "2016-09-13T02:11:44Z",
    "value": "100",
  }, {
    "date": "2016-09-13T02:11:44Z",
    "value": "200",
  }]
}, {
  "key": "name2",
  "enabled": "false",
  "values": [{
    "date": "2016-09-13T02:11:44Z",
    "value": "400",
  }, {
    "date": "2016-09-13T02:11:44Z",
    "value": "500",
  }]
}];

var max = d3.max(data.filter(d => d.enabled === "true"), e => d3.max(e.values, f => f.value));

console.log(max);
<script src="https://d3js.org/d3.v4.min.js"></script>

它使用enabled: "true"接受多个对象,检查第二个演示,我在数据数组中放入另一个对象:

var data = [{
  "key": "name1",
  "enabled": "true",
  "values": [{
    "date": "2016-09-13T02:11:44Z",
    "value": "100",
  }, {
    "date": "2016-09-13T02:11:44Z",
    "value": "200",
  }]
}, {
  "key": "name2",
  "enabled": "false",
  "values": [{
    "date": "2016-09-13T02:11:44Z",
    "value": "400",
  }, {
    "date": "2016-09-13T02:11:44Z",
    "value": "500",
  }]
},{
  "key": "name1",
  "enabled": "true",
  "values": [{
    "date": "2016-09-13T02:11:44Z",
    "value": "800",
  }, {
    "date": "2016-09-13T02:11:44Z",
    "value": "200",
  }]
}];

var max = d3.max(data.filter(d => d.enabled === "true"), e => d3.max(e.values, f => f.value));

console.log(max);
<script src="https://d3js.org/d3.v4.min.js"></script>