Javascript 减少坐标对集合的映射

Javascript 减少坐标对集合的映射,javascript,d3.js,mapreduce,Javascript,D3.js,Mapreduce,我已经做了几年的开发人员了,其中一个我似乎不太了解的概念是MapReduce 我有一个定义正方形的坐标集合,每个值是两个数组的数组。每个内部数组本身就是两个数值的数组 //Example values: //Each value is the following [[left, top],[right, bottom]] var boundingBoxes = [ [[20, 20], [50, 30]], [[15, 25], [35, 45]], [[25, 25], [40, 40]] ]

我已经做了几年的开发人员了,其中一个我似乎不太了解的概念是MapReduce

我有一个定义正方形的坐标集合,每个值是两个数组的数组。每个内部数组本身就是两个数值的数组

//Example values:
//Each value is the following [[left, top],[right, bottom]]
var boundingBoxes = [
[[20, 20], [50, 30]],
[[15, 25], [35, 45]],
[[25, 25], [40, 40]]
]
我需要将这个集合简化为一组坐标,这将允许我定义一个矩形,它包围所有坐标在集合中的矩形。因此,左上角的最小值,右下角的最大值

//Output for above values should be
[[15, 20], [50, 45]]

进一步的背景。坐标的结构来自d3.path().bounds(d)。我将获得多个状态的边界,并创建一个封装所有状态的边界框;用于缩放地图上重新定义的状态集合。

如果要使用
reduce
解决此问题,请执行以下操作:

var boundingBoxes = [
  [[20, 20], [50, 30]],
  [[15, 25], [35, 45]],
  [[25, 25], [40, 40]]
];

var result = boundingBoxes.reduce(function(prev,curr){
  var left = Math.min(prev[0][0], curr[0][0]),
      top = Math.min(prev[0][1], curr[0][1]),
      right = Math.max(prev[1][0], curr[1][0]),
      bottom = Math.max(prev[1][1], curr[1][1]);

  return [[left,top],[right,bottom]];
});
reduce
的回调函数从数组中获取
previous
current
元素。您可以将第一个“previous”的初始值设置为
reduce
的第二个参数。如果省略初始值,reduce将从第一个和第二个元素开始


您只需将返回元素的每个值与回调中的相应值进行比较。

不确定您的问题是什么——您是否在问如何使用D3(提示:使用
D3.max
D3.min
)或者如何使用map-reduce?如何使用map-reduce。您使用的是什么特定的map-reduce实现?只是简单的JavaScript。下划线也是一个选项。在D3中,它只是
xmin=D3.min(边界框,函数(d){returnd[0][0];});xmax=d3.max(边界框,函数(d){返回d[1][0];})和类似的y。