@beefront17

Как сгруппировать массив по координатам?

День добрый! Подскажите пожалуйста как лучше сгруппировать массив по координатам?
Например есть массив с координатами
const arr = [
	{
		city: 'NEW YORK',
		lat: 40.718758,
		long: -73.986427,
	},
	{
		city: 'NEW YORK',
		lat: 40.730223,
		long: -73.986427,
	},
	{
		city: 'NY',
		lat: 40.72775,
		long: -73.980396,
	},
	{
		city: 'CLINTON',
		lat: 38.739765,
		long: -76.912096,
	},
...
]

Результат должен быть таким
const newArr = [
	{
		city: 'NEW YORK',
		lat: 40.718758,
		long: -73.986427,
		placed: 1,
	},
	{
		city: 'NEW YORK',
		lat: 40.730223,
		long: -73.986427,
		placed: 1,
	},
	{
		city: 'NY',
		lat: 40.72775,
		long: -73.980396,
		placed: 1,
	},
	{
		city: 'CLINTON',
		lat: 38.739765,
		long: -76.912096,
		placed: 2,
	},
	...
]


Условие может бить такое
Math.abs(prevObj.lat - nextObj.lat) < 1 || Math.abs(prevObj.long - nextObj.long) < 1

Буду благодарен за помощь!
  • Вопрос задан
  • 184 просмотра
Решения вопроса 1
TommyV888
@TommyV888
-
Можно отбросить дробную часть, и добавить координаты как строку для идентификации одинаковых мест, в вашем примере погрешность и так чуть больше единицы. Вот пример:
const arr = [
  {
    city: 'NEW YORK',
    lat: 40.718758,
    long: -73.986427,
  },
  {
    city: 'NEW YORK',
    lat: 40.730223,
    long: -73.986427,
  },
  {
    city: 'NY',
    lat: 40.72775,
    long: -73.980396,
  },
  {
    city: 'CLINTON',
    lat: 38.739765,
    long: -76.912096,
  },
]

placed = 0;

for(let data of arr){
  let cardinals = ~~data.lat +''+ ~~data.long;
  let x = arr.find(o => o.cardinals === cardinals);
  data.cardinals = cardinals;
  
  if(typeof(x) === 'undefined'){
    placed += 1;
  }
  
  data.placed = placed;
}

console.log(arr);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
обычный цикл, без какого-нибудь lodash тут задачу в строку не решить.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы