На основании местоположения пользователя и местоположения магазина я пытаюсь определить расстояние между ними. Это работает, но мне нужен массив со всеми значениями и сортировкой по расстоянию между двумя точками.
У меня есть функция add_stores_to_array, которая добавляет все магазины в хранилища массива при циклическом просмотре файла JSON.
add_stores_to_array = function(position) {
var user_latitude = position.coords.latitude;
var user_longitude = position.coords.longitude;
$.getJSON('/stores').done(function(data) {
$.each(data.features, function(i, item) {
var store_latitude = item.geometry.coordinates[1];
var store_longitude = item.geometry.coordinates[0];
var user = new google.maps.LatLng(user_latitude, user_longitude);
var store = new google.maps.LatLng(store_latitude, store_longitude);
var directionsService = new google.maps.DirectionsService();
var request = {
origin:user,
destination:store,
travelMode: google.maps.DirectionsTravelMode.DRIVING
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
var response = Math.ceil(response.routes[0].legs[0].distance.value / 1000);
// add distance and store id to the array stores
stores.push({distance: response, id: item.properties.Nid});
}
});
});
// call the sort function
sort_stores(stores);
console.log(stores);
});
};
После $.each я вызываю функцию сортировки. Но после входа в консоль он по-прежнему не отсортирован.
Моя функция sort_stores:
sort_stores = function(stores){
stores.sort(function(a, b){
return a.distance - b.distance;
});
};
Сначала я думал, что это не работает, потому что $.each все еще работает, но после добавления этого кода он все еще не работает:if (i == Object.keys(data.features).pop()) {
sort_stores(stores);
}
Итак, я попробовал что-то другое. Я вызываю функцию sort_stores(stores) в $.each.
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
var response = Math.ceil(response.routes[0].legs[0].distance.value / 1000);
stores.push({distance: response, id: item.properties.Nid});
sort_stores(stores);
}
});
И это работает... массив сортируется на основе расстояния между значениями в массиве. Но теперь он сортирует массив после каждого добавленного хранилища... не очень эффективно.
Есть ли правильный способ вызвать функцию sort_stores(stores) один раз и отсортировать это когда все магазины добавляются в массив?
РЕДАКТИРОВАТЬ:
Если я размещаю предупреждение() перед sort_stores(stores) работает..
if (status == google.maps.DirectionsStatus.OK) {
var response = Math.ceil(response.routes[0].legs[0].distance.value / 1000);
stores.push({distance: response, id: item.properties.Nid});
}
});
});
alert('Call the sort_stores(stores) function after the $.each, with an alert.. it is working?');
sort_stores(stores);
});
};
Изменить 2:
Обычно я вызываю функцию add_stores_to_array отсюда?get_user_location = function(){
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(add_stores_to_array);
}
};
Подробнее здесь: https://stackoverflow.com/questions/405 ... g-properly
Функция сортировки jQuery не работает должным образом ⇐ Jquery
Программирование на jquery
-
Anonymous
1731174572
Anonymous
На основании местоположения пользователя и местоположения магазина я пытаюсь определить расстояние между ними. Это работает, но мне нужен массив со всеми значениями и сортировкой по расстоянию между двумя точками.
У меня есть функция add_stores_to_array, которая добавляет все магазины в хранилища массива при циклическом просмотре файла JSON.
add_stores_to_array = function(position) {
var user_latitude = position.coords.latitude;
var user_longitude = position.coords.longitude;
$.getJSON('/stores').done(function(data) {
$.each(data.features, function(i, item) {
var store_latitude = item.geometry.coordinates[1];
var store_longitude = item.geometry.coordinates[0];
var user = new google.maps.LatLng(user_latitude, user_longitude);
var store = new google.maps.LatLng(store_latitude, store_longitude);
var directionsService = new google.maps.DirectionsService();
var request = {
origin:user,
destination:store,
travelMode: google.maps.DirectionsTravelMode.DRIVING
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
var response = Math.ceil(response.routes[0].legs[0].distance.value / 1000);
// add distance and store id to the array stores
stores.push({distance: response, id: item.properties.Nid});
}
});
});
// call the sort function
sort_stores(stores);
console.log(stores);
});
};
После $.each я вызываю функцию сортировки. Но после входа в консоль он по-прежнему не отсортирован.
Моя функция sort_stores:
sort_stores = function(stores){
stores.sort(function(a, b){
return a.distance - b.distance;
});
};
Сначала я думал, что это не работает, потому что $.each все еще работает, но после добавления этого кода он все еще не работает:if (i == Object.keys(data.features).pop()) {
sort_stores(stores);
}
Итак, я попробовал что-то другое. Я вызываю функцию sort_stores(stores) в $.each.
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
var response = Math.ceil(response.routes[0].legs[0].distance.value / 1000);
stores.push({distance: response, id: item.properties.Nid});
sort_stores(stores);
}
});
И это работает... массив сортируется на основе расстояния между значениями в массиве. Но теперь он сортирует массив после каждого добавленного хранилища... не очень эффективно.
Есть ли правильный способ вызвать функцию sort_stores(stores) один раз и отсортировать это когда все магазины добавляются в массив?
[b]РЕДАКТИРОВАТЬ:[/b]
Если я размещаю предупреждение() перед sort_stores(stores) работает..
if (status == google.maps.DirectionsStatus.OK) {
var response = Math.ceil(response.routes[0].legs[0].distance.value / 1000);
stores.push({distance: response, id: item.properties.Nid});
}
});
});
alert('Call the sort_stores(stores) function after the $.each, with an alert.. it is working?');
sort_stores(stores);
});
};
[b]Изменить 2:[/b]
Обычно я вызываю функцию add_stores_to_array отсюда?get_user_location = function(){
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(add_stores_to_array);
}
};
Подробнее здесь: [url]https://stackoverflow.com/questions/40545033/jquery-sort-function-not-working-properly[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия