具有以下对象:
var obj = [
{'a':1, 'b':'jack'},
{'a':2, 'b':'mario'},
{'a':3, 'b':'dan'}
]
使用基于“ a”但返回“ b”的d3.extent()的最正确方法是什么。
以下一行
d3.extent(obj, function(d) {return d.a})
将导致:
[1,3]
我想得到的结果是:
['jack','dan']
答案 0 :(得分:1)
简介:答案已经删除了此问题的正确答案(> 10k用户可以看到),可能是在收到反对意见之后。根据{{3}},我正在将他的答案复制为社区Wiki答案,并添加一些我自己的信息。我也投票决定不删除他的答案。
您无法使用d3.extent
做您描述的事情,但是您可以使用d3.extent
和一些普通的JavaScript轻松地做到这一点。
但是,如果只想使用D3方法,则可以使用this meta suggestion和d3.minIndex
。就像这样简单:
var myDesiredOutput = [
obj[d3.minIndex(obj, d => d.a)].b,
obj[d3.maxIndex(obj, d => d.a)].b
];
这是演示:
var obj = [{
'a': 1,
'b': 'jack'
},
{
'a': 2,
'b': 'mario'
},
{
'a': 3,
'b': 'dan'
}
];
var myDesiredOutput = [
obj[d3.minIndex(obj, d => d.a)].b,
obj[d3.maxIndex(obj, d => d.a)].b
];
console.log(myDesiredOutput)
<script src="https://d3js.org/d3-array.v2.min.js"></script>
请注意您必须引用d3-array
小型库...
<script src="https://d3js.org/d3-array.v2.min.js"></script>
...因为在撰写本文时,d3.minIndex
和d3.maxIndex
都不是默认捆绑软件的一部分。
答案 1 :(得分:0)
从d3-array
版本2.3开始,可以使用d3.least
和d3.greatest
以便根据指定字段分别获取指定可迭代对象的最小/最大元素:
d3.least(obj, d => d.a); // { 'a': 1, 'b': 'jack' }
因此可轻松访问包含最小和最大元素的子字段:
var min = d3.least(obj, d => d.a).b; // jack
var max = d3.greatest(obj, d => d.a).b; // dan
例如:
var obj = [
{ 'a': 1, 'b': 'jack' },
{ 'a': 2, 'b': 'mario' },
{ 'a': 3, 'b': 'dan' }
];
var min = d3.least(obj, d => d.a).b;
var max = d3.greatest(obj, d => d.a).b;
console.log(min);
console.log(max);
<script src="https://d3js.org/d3-array.v2.min.js"></script>