MeteorJS和UnderscoreJS:将结果分组到Google Map上的绘图点

时间:2014-03-17 01:33:53

标签: google-maps meteor underscore.js

我正在制作一个小型MeteorJS应用程序,该应用程序根据受欢迎的工作区域在地图上绘制点。

我有这个:

Template.list.jobs = function() {
  if(Session.get('currentIndustryOnet')) {
    jobs = Jobs.find({onet: Session.get('currentIndustryOnet')}).fetch();
    // Session.set('jobCount', jobs.count());

    var cnt = _.groupBy(jobs, 'address');
    console.log(cnt);

    return Pagination.collection(jobs);
  } else {
    jobs = Jobs.find()
    Session.set('jobCount', jobs.count());
    return Pagination.collection(jobs.fetch());
  }
}

cnt变量返回一个正确分组的数组(数组的键是Allentown, PA之类的地址)。我有一系列在美国有过城市的城市以及他们的LAT / LONG在Google地图上绘制。因此,我将从分组数组中取出前100名,在Cities集合中找到lat / long并在地图上绘制这些点。

我不熟悉使用groupedBy方法根据长度对列表进行排序,然后拔出要用作搜索的密钥。

1 个答案:

答案 0 :(得分:1)

我不是百分之百确定数据结构...但假设作业有一个address字段,并且您希望它们按出现频率和上限排序,您可以这样做:

var addresses = _.chain(jobs)
  .countBy('address')
  .pairs()
  .sortBy(function(j) {return -j[1];})
  .map(function(j) {return j[0];})
  .first(100)
  .value();

注意可能有一种更聪明的方法来使用下划线来得出这个结果。一旦你有了有上限的,排序的地址列表,你可以通过如下的查找得到纬度/经度值:

Cities.find({address: {$in: addresses}}).fetch();