#javascript #arrays #react-native #geolocation
#javascript #массивы #react-native #геолокация
Вопрос:
У меня есть массив, и мне нужно упорядочить его данные по расстоянию до определенной точки. Зная, что это .sort()
не сработает, поскольку я имею дело с координатами, я использовал библиотеку под названием Geolib, в которой есть функция, вызываемая getPreciseLocation()
, которая является именно тем, что мне нужно, но, похоже, она не работает при итерации по массиву. Вот массив, содержащий данные, которые я буду использовать.
Данные:
[
{
"id": "1",
"Point": "27.1597268, 40.6646601"
},
{
"id": "2",
"Point": "11.1640393, 49.648713"
},
{
"id": "3",
"Point": "26.1539253, 42.6599287"
},
{
"id": "4",
"Point": "21.1597268, 44.6646601"
},
{
"id": "5",
"Point": "10.1640393, 43.648713"
},
{
"id": "6",
"Point": "26.1539253, 61.6599287"
}
]
Код, который я пытался использовать для итерации по массиву.
let DistancesFromUserLocation = [];
this.state.Data.forEach(item => {
DistancesFromUserLocation.push(geolib.getPreciseDistance({latitude: 30.1891168, longitude: 11.6226982}, item.Point))
})
В качестве отказа от ответственности: мне нужно только получить, чтобы получить расстояние от каждого объекта массива до нового массива.
Я пробовал и исследовал многие вещи и нашел решение, но только подумав, что я добираюсь до решения, что-то пошло не так.
Ответ №1:
Вам нужно переносить сгенерированное расстояние каждую итерацию в DistancesFromUserLocation
массив.
let DistancesFromUserLocation = [];
this.state.Data.forEach(item => {
// push each distance to `DistancesFromUserLocation`
DistancesFromUserLocation.push(
geolib.getPreciseDistance(
{latitude: 30.1891168, longitude: 11.6226982},
item.Point
);
)
})
Только тогда вы можете использовать Array.sort()
.
console.log(DistancesFromUserLocation.sort());
Редактировать:
Проверьте мой рабочий пример здесь, в codesandbox.
Комментарии:
1. Спасибо, это то, чем я занимался всю ночь. Кажется, что я вставил неправильный код, когда я должен был вставить тот, который с помощью метода .push(). Даже при этом это не работает. Он возвращает те же значения:Array [ 3387103, 3387103, 3387103, 3387103, 3387103, 3387103, ]
2. Это странно. Я использую
geolib v3.3.1
от manuelbieh , и это работает без проблем. Проверьте мой рабочий пример здесь, в Stackblitz3. Да, это абсолютно тот результат, который я хочу. Я также использую эту версию Geolib, но сейчас я действительно в замешательстве. Это немного странно. ** РЕДАКТИРОВАТЬ ** : Что еще более странно, я написал этот код как автономный для .js, над которым я работал, и он работает нормально.
4. Может быть, что-то странное происходит за пределами вашего кода? Кроме того, убедитесь, что ваши
this.state.Data
точки верны, прежде чем выполнять цикл.