通过lat&lng对对象数组中的对象进行分组和计数

时间:2018-12-04 20:33:48

标签: jquery arrays duplicates

我在Jquery中有以下数组,它正在绘制Google Map,我想做的是将相同的经纬度坐标分组。 因此,在下面的示例中,前4个将被分组,后2个将被分组

原始数组

   var markers = [
{
    "title": 'Duncan-Desktop',
    "lat": '-41.2283',
    "lng": '174.8700',
    "description": 'Duncan-Desktop'
},
{
    "title": 'james-dev',
    "lat": '-41.2283',
    "lng": '174.8700',
    "description": 'james-dev'
},
{
    "title": 'james-laptop',
    "lat": '-41.2283',
    "lng": '174.8700',
    "description": 'james-laptop'
},
{
    "title": 'MX-MIC-1812-3-0000000105',
    "lat": '-41.2283',
    "lng": '174.8700',
    "description": 'MX-MIC-1812-3-0000000105'
},
{
    "title": 'MX-MIC-1812-3-0000000106',
    "lat": '-42.5443',
    "lng": '175.458',
    "description": 'MX-MIC-1812-3-0000000106'
},
{
    "title": 'MX-MIC-1812-3-0000000107',
    "lat": '-42.5443',
    "lng": '175.458',
    "description": 'MX-MIC-1812-3-0000000107'
}

];

我基本上是想要输出每个确切位置的计数,经纬度和经度,以及一连串的标题。

var markers = [
    {
        "title": 'Duncan-Desktop, james-dev, james-laptop, MX-MIC-1812-3-0000000105',
        "lat": '-41.2283',
        "lng": '174.8700',
        "count": '4'
    },
    {
        "title": 'MX-MIC-1812-3-0000000106, MX-MIC-1812-3-0000000107',
        "lat": '-42.5443',
        "lng": '175.458',
        "count": '2'
    }
];

每个循环我都尝试了几次,但至今仍无法解决。 任何帮助都很棒

1 个答案:

答案 0 :(得分:1)

您可以通过Array.reduce进行操作,以便对由latlng组成的密钥进行分组,然后分别通过count/title获得incrementing/concatenating分别:

const data = [{ "title": 'Duncan-Desktop', "lat": '-41.2283', "lng": '174.8700', "description": 'Duncan-Desktop' }, { "title": 'james-dev', "lat": '-41.2283', "lng": '174.8700', "description": 'james-dev' }, { "title": 'james-laptop', "lat": '-41.2283', "lng": '174.8700', "description": 'james-laptop' }, { "title": 'MX-MIC-1812-3-0000000105', "lat": '-41.2283', "lng": '174.8700', "description": 'MX-MIC-1812-3-0000000105' }, { "title": 'MX-MIC-1812-3-0000000106', "lat": '-42.5443', "lng": '175.458', "description": 'MX-MIC-1812-3-0000000106' }, { "title": 'MX-MIC-1812-3-0000000107', "lat": '-42.5443', "lng": '175.458', "description": 'MX-MIC-1812-3-0000000107' } ]

const result = data.reduce((r,{title, lat, lng, description}) => {
  let key = `${lat}${lng}`
  r[key] = r[key] || { title: '', lat, lng, count: 0 }
  r[key].title = r[key].title.concat(' ', description)
  r[key].count += 1
  return r
}, {})

console.log(Object.values(result))