d3.js:如何使用地图功能?

Ric*_*ard 12 javascript d3.js

如何使用d3.map()[10, 12]退出以下数组?

var mydata = [ 
  { '__data__' : 10 }, 
  {'__data__' : 12 }
]; 
Run Code Online (Sandbox Code Playgroud)

我一直在尝试这个,但它不起作用:

var mymap = d3.map(mydata, function(d) { 
  return d.__data__; 
});
Run Code Online (Sandbox Code Playgroud)

Lar*_*off 9

你不能 - d3.map()不是用于在数组中映射函数,而是用于散列的垫片.简而言之,虽然可以像散列一样使用对象,但是有些情况可能会发生意外行为.一个新的Javascript标准提出了一个解决方案,直到它实现,d3.map()可以用于相同的效果.

文档中的更多信息.

  • 你可以简单地做`mydata.map(function(d){return d .__ data;})`. (5认同)

Bri*_*ire 5

.map() 只是创建另一个数组,遍历你给它的任何东西并执行你在旧数组中的每个元素上定义的函数,然后它就成为新数组。

因此,如果我想对数组中的所有元素执行单个操作并从中创建一个新数组,我会使用 .map()

例如,当我从 /proc/loadavg 获取的数据为我每 5-15 分钟平均负载提供 0.28、0.03、1.0、0.97、0.04 等数字时,我需要查看以百分比表示的内容。但我还需要在我的计算中运行 nproc 的输出,nproc 为我提供了分布在哪些内核上的数量。所以每次 /proc/loadavg 给我一个新值时我都会创建一个数组,然后我将每个新值推送到一个数组上...

这将是您的初始数据:

var data = [0.28,0.03,1.0,0.97,0.04];
var dataSize = 5;
Run Code Online (Sandbox Code Playgroud)

这可能是用于应用于原始数据数组中所有索引的函数:

   percent = function () {
      return (loadval/(numCores*100));
   }
Run Code Online (Sandbox Code Playgroud)

这会将其映射到具有转换后的值的新数组:

 data = d3.range(dataSize).map(percent);
Run Code Online (Sandbox Code Playgroud)