Группировать и считать объекты в массиве объектов по широте и долготе - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть следующий массив в Jquery, который строит карту Google. Я хочу сгруппировать одинаковые координаты lat и lng.Поэтому в приведенном ниже примере первые 4 будут сгруппированы, а последние 2 сгруппированы вместе

Oringinal Array

   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'
}

];

Я в основном хочу получить выводрассчитывать для каждого точного местоположения, lat и lng, а также строку заголовков, объединенных вместе.

Примерно так:

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 голосов
/ 04 декабря 2018

Вы можете сделать это через Array.reduce, чтобы сгруппировать по ключу, состоящему из lat & lng, а затем получить 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))
...