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


我该怎么用 d3.map() 要得到 [10, 12] 超出以下数组?

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

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

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

8603
2018-04-17 11:26


起源



答案:


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

更多信息 文件


8
2018-04-17 12:37



关于如何根据他的例子得到[10,12]的任何建议? - helixmat
你可以干脆做 mydata.map(function(d) { return d.__data; })。 - Lars Kotthoff


答案:


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

更多信息 文件


8
2018-04-17 12:37



关于如何根据他的例子得到[10,12]的任何建议? - helixmat
你可以干脆做 mydata.map(function(d) { return d.__data; })。 - Lars Kotthoff


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

3
2018-06-28 16:32