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

moz*_*dyv 29 d3.js

我是d3和Javascript的新手.我已经玩了很多个例子,但现在想做一些更详细的修改.其中一个是找到我用作输入的JSON的最大值和最小值.

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

d3.json("data/unemployment_by_state.json", function(data) {   
  console.log(data);
  console.log(d3.min([data]));
  console.log(d3.max([data]));
});
Run Code Online (Sandbox Code Playgroud)

这是JSON对象的片段:

{"01":32710,"02":20280,"03":18002}
Run Code Online (Sandbox Code Playgroud)

我想要的一些帮助是理解为什么d3.min([data])和d3.max([data])导致整个对象输出到控制台而不是数据对象中的最小和最大数字.

提前致谢.

mik*_*ike 50

如果您的数据是一个数组,那么如果您删除数据括号,原始代码将起作用:

  var data = [32710,20280,18002];

  console.log(data);
  console.log(d3.min(data));
  console.log(d3.max(data));
Run Code Online (Sandbox Code Playgroud)

如果需要使用键"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; }));
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案.只需传递max函数即可获取数据. (5认同)

nra*_*itz 46

d3.min()d3.max()在阵列上的功能操作,而不是对象.你似乎试图通过将data对象包装在一个数组中来解决这个问题(例如d3.max([data])),但所有这些都是在说"给我一个数组的最大值,一个值(数据对象)." 由于数组中只有一个值,因此返回该值.

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

var max = d3.max(d3.values(data)); 
// 32710
Run Code Online (Sandbox Code Playgroud)

如果你想知道密钥,你可能需要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 }
Run Code Online (Sandbox Code Playgroud)