减少坐标对集合的映射



我已经做了几年的开发人员了,有一个概念我似乎不太明白,那就是map reduce。

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

//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的回调函数从数组中取previouscurrent元素。您可以将第一个"previous"的初始值设置为reduce的第二个参数。如果省略初始值,则reduce从第一个和第二个元素开始。

您只需要比较每个值并返回与回调中相应值的元素。

相关内容

  • 没有找到相关文章

最新更新