30

私はd3とJavascriptを初めて使用します。コロプレスの例をいじってみましたが、もう少し詳細な変更を加えたいと思います。その1つは、入力として使用している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])が、データオブジェクトの最小数と最大数ではなく、オブジェクト全体をコンソールに出力する理由を理解するのに役立ちます。 。

前もって感謝します。

4

3 に答える 3

60

データが配列の場合、データを囲む角かっこを削除すると、元のコードが機能します。

  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; }));
于 2014-07-14T19:49:05.707 に答える
47

d3.min()and関数はd3.max()、オブジェクトではなく配列で動作します。dataオブジェクトを配列(たとえば)でラップすることでこれに対処しようとしているようですが、d3.max([data])実際には、「1つの値(データオブジェクト)を持つ配列の最大値を教えてください」と言っています。配列には値が1つしかないため、その値が返されます。

オブジェクトの最大値/最小値だけが必要な場合は、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 }
于 2012-07-15T06:53:32.230 に答える
0

私はd3とJavaScriptも初めてですが、とを使用して、オブジェクトを含む3行の最小値と最大値を見つける回避策を見つけましd3.extent.concat

y.domain(
  d3.extent(
    d3.extent(data, function(d) {
      return d.line1;     })
    .concat(d3.extent(data, function(d) {
      return d.line2;     })
            .concat(d3.extent(data, function(d) {
      return d.line3;     })
                   ))
  ));

于 2015-09-11T12:49:28.600 に答える