如何在d3.json命令中使用d3.min和d3.max

如何在d3.json命令中使用d3.min和d3.max,d3.js,D3.js,我不熟悉d3和Javascript。我已经使用了choropleth示例,但现在想做一些更详细的更改。其中之一是查找我用作输入的JSON的最大值和最小值 我的问题很简单,因为对于console.log(data)命令,对象下面的代码片段被正确地输出到控制台,但是整个对象也被输出到min和max语句,而不仅仅是min和max语句 d3.json("data/unemployment_by_state.json", function(data) { console.log(data);

我不熟悉d3和Javascript。我已经使用了choropleth示例,但现在想做一些更详细的更改。其中之一是查找我用作输入的JSON的最大值和最小值

我的问题很简单,因为对于console.log(data)命令,对象下面的代码片段被正确地输出到控制台,但是整个对象也被输出到min和max语句,而不仅仅是min和max语句

d3.json("data/unemployment_by_state.json", function(data) {   
  console.log(data);
  console.log(d3.min([data]));
  console.log(d3.max([data]));
});
以下是JSON对象的一个片段:

{"01":32710,"02":20280,"03":18002}
我想要得到的帮助是理解为什么d3.min([data])和d3.max([data])会导致将整个对象输出到控制台,而不是数据对象中的min和max数字

提前感谢。

d3.min()和
d3.max()
函数在数组上运行,而不是在对象上运行。您似乎试图通过将
数据
对象包装到数组中来解决这个问题(例如,
d3.max([data])
),但实际上所做的只是说“给我一个数组的一个值(数据对象)的最大值。”因为数组中只有一个值,所以返回该值

如果只需要对象中的最大/最小值,可以使用
d3.values()
函数将数据中的所有值提取为一个数组,然后获取该数组中的最大值:

var max = d3.max(d3.values(data)); 
// 32710
如果还想知道键,可能需要使用
d3.entries()
创建
{key,value}
对象数组,然后对它们进行排序并取其顶部:

// create an array of key, value objects
var max = d3.entries(data)
    // sort by value descending
    .sort(function(a, b) { return d3.descending(a.value, b.value); })
    // take the first option
    [0];
// { key: "01", value: 32710 }

如果您的数据是一个数组,那么如果您去掉数据周围的括号,您的原始代码将正常工作:

  var data = [32710,20280,18002];

  console.log(data);
  console.log(d3.min(data));
  console.log(d3.max(data));
如果需要使用键“01”、“02”、“03”标识数组值,请创建一个对象数组,并对这些值进行操作以获得最小值/最大值:

   //data as key/value pairs
   var data = [
     {key: "01",  value:  32710},
     {key: "02",  value:  20280},
     {key: "03",  value: 18002}
  ];

  console.log(data);
  console.log(d3.min(data, function(d) { return d.value; }));
  console.log(d3.max(data, function(d) { return d.value; }));

  // AND IF YOU WANT THE min/max of the KEYS:
  console.log(d3.min(data, function(d) { return d.key; }));
  console.log(d3.max(data, function(d) { return d.key; }));

我也不熟悉d3和JavaScript,但我找到了一个解决方法,使用
d3.extent
.concat
,找到了三行对象的最小值和最大值:

y.domain(
d3.范围(
d3.范围(数据、功能(d){
返回d.line1;})
.concat(d3)范围(数据、函数(d){
返回d.line2;})
.concat(d3)范围(数据、函数(d){
返回d.line3;})
))

));这是正确答案。只需将一个函数传递给max,它就可以获取数据。当您想要传递一个范围,例如传递给一个
.domain
函数来缩放轴时,您需要像这样提供最小值和最大值:
axis.domain([d3.min(data,function(d){return d.value;}),d3.max(data,function(d){return d.value})一个很好的例子。我也喜欢,它在带有匿名函数的对象上使用
max()
来构建比例。如何获取最小/最大值的键?@Beamer-max key for value可能是一个单独的问题。