为什么使用键过滤器而不是columns.slice()?

Art*_*nko 2 javascript d3.js

作者为何使用

d3.keys(cars[0]).filter...
Run Code Online (Sandbox Code Playgroud)

而不是使用

cars.columns.slice(1)
Run Code Online (Sandbox Code Playgroud)

..?切片有效地返回相同的信息,而不必在下面做任何逻辑.

  var x = d3.scale.ordinal().rangePoints([0, width], 1),
   y = {};

  // Extract the list of dimensions and create a scale for each.
  x.domain(dimensions = d3.keys(cars[0]).filter(function(d) {
    return d != "name" && (y[d] = d3.scale.linear()
        .domain(d3.extent(cars, function(p) { return +p[d]; }))
        .range([height, 0]));
  }));
Run Code Online (Sandbox Code Playgroud)

这方面的数据是

name,economy (mpg),cylinders,displacement (cc),power (hp),weight (lb),0-60 mph (s),year
AMC Ambassador Brougham,13,8,360,175,3821,11,73
AMC Ambassador DPL,15,8,390,190,3850,8.5,70
AMC Ambassador SST,17,8,304,150,3672,11.5,72
Run Code Online (Sandbox Code Playgroud)

资料来源:https://bl.ocks.org/mbostock/1341021

Ger*_*ado 5

该代码的作者是D3的创建者.当然,他可能更喜欢第二个片段.但是,该代码使用D3 v3.x,并且columns在该版本的D3中数据数组中没有属性.

我们在下面的片段中看到这一点.

首先,使用D3 v3.x:

var data = d3.csv.parse(d3.select("#csv").text());

console.log("using d3.keys: " + d3.keys(data[0]));
console.log("using data.columns: " + data.columns);
Run Code Online (Sandbox Code Playgroud)
pre{
  display: none;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://d3js.org/d3.v3.min.js"></script>
<pre id="csv">name,economy (mpg),cylinders,displacement (cc),power (hp),weight (lb),0-60 mph (s),year
AMC Ambassador Brougham,13,8,360,175,3821,11,73
AMC Ambassador DPL,15,8,390,190,3850,8.5,70
AMC Ambassador SST,17,8,304,150,3672,11.5,72</pre>
Run Code Online (Sandbox Code Playgroud)

你可以看到它d3.keys(data[0])有效,而data.columns返回undefined.

现在使用D3 v4.x:

var data = d3.csvParse(d3.select("#csv").text());

console.log("using d3.keys: " + d3.keys(data[0]));
console.log("using data.columns: " + data.columns);
Run Code Online (Sandbox Code Playgroud)
pre{
  display: none;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://d3js.org/d3.v4.min.js"></script>
<pre id="csv">name,economy (mpg),cylinders,displacement (cc),power (hp),weight (lb),0-60 mph (s),year
AMC Ambassador Brougham,13,8,360,175,3821,11,73
AMC Ambassador DPL,15,8,390,190,3850,8.5,70
AMC Ambassador SST,17,8,304,150,3672,11.5,72</pre>
Run Code Online (Sandbox Code Playgroud)

无论d3.keys(data[0])data.columns工作,给你同样的结果.