14

我怎样才能d3.map()摆脱[10, 12]以下数组?

var mydata = [ 
  { '__data__' : 10 }, 
  {'__data__' : 12 }
]; 

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

var mymap = d3.map(mydata, function(d) { 
  return d.__data__; 
});
4

2 回答 2

9

您不能 -d3.map()不是用于跨数组映射函数,而是用于散列的垫片。简而言之,虽然对象可以像哈希一样使用,但在某些情况下可能会发生意外行为。一个新的 Javascript 标准为此提出了一个解决方案,并且在它被实施之前,d3.map()可以用于相同的效果。

文档中的更多信息。

于 2013-04-17T12:37:01.923 回答
6

.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;

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

   percent = function () {
      return (loadval/(numCores*100));
   }

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

 data = d3.range(dataSize).map(percent);
于 2016-06-28T16:32:20.797 回答