Функция сортировки jQuery не работает должным образомJquery

Программирование на jquery
Ответить
Anonymous
 Функция сортировки jQuery не работает должным образом

Сообщение 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) один раз и отсортировать это когда все магазины добавляются в массив?
РЕДАКТИРОВАТЬ:
Если я размещаю предупреждение() перед 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Jquery»