Отсортированный ответ становится несортированным во внешнем интерфейсе jquery laravel

#javascript #php #jquery #ajax #laravel

#javascript #php #jquery #ajax #laravel

Вопрос:

Я отправляю ответ от контроллера laravel после сортировки. ответ отсортирован.

  public function search(Request $request)
    {
 

    $providers = Provider::get()->map(function($item) use($request){
        $item->setAttribute('distance',$this->addDistanceToProvider($item,$request)) ;
  
        return $item;
    })->sortBy('distance');

        return $providers;

    }

 

ответ

 {"1":{"id":2,"owner_name":"hjjk","owner_email":"bilal@gmail.com","owner_phone":"4567898765432","name":"hgjjj","email":"devyempresas@gmail.com","phone":"","password":"$2y$10$9KmwSmKcxQNHxN6/KmViQOVgGOIbsTxnPDd.prkTpK9BfVMJ0CXpm","rfc":"12344","tax":"67","location":"Nezahualcu00f3yotl, State of Mexico, Mexico","longitude":"-98.9896643","latitude":"19.3994934","comission":76,"status":1,"distance":314.703},"2":{"id":3,"owner_name":"abc","owner_email":"asphaltairborne316@gmail.com","owner_phone":"06767672626","name":"Bilal Arshad","email":"swift.solutions.com@gmail.com","phone":"","password":"$2y$10$mLRpt7O2o0wdg8AecgpWA.4xfN9hV4VaG.JRSZyr/hUoKPjkCkdvm","rfc":"asd","tax":"234","location":"Cuernavaca, Morelos, Mexico","longitude":"-99.22156590000002","latitude":"18.9242095","comission":113,"status":1,"distance":369.312},"0":{"id":1,"owner_name":"bilal","owner_email":"swift.solutions.com@gmail.com","owner_phone":"0213123132131","name":"Bilal Arshad","email":"admin@admin.com","phone":"","password":"$2y$10$BUgsN4Qknk2M/LNQwQoOrOOad.pu9dFQUiylFSSTgaRrQwDIbDhqG","rfc":"12344","tax":"dasdasd","location":"Nuevo Laredo, Tamaulipas, Mexico","longitude":"-99.68859527909136","latitude":"27.784235863652583","comission":877,"status":1,"distance":1034.684}}
 

Но когда я вижу предварительный просмотр в brwoser, он не сортируется, и Jquery отображает данные в несортированном виде

Функция Jquery

     $.each(data, function(index, provider) {
    
    embedData(index,provider)
        
});
 
 function embedData(index,provider){
    $('#provider_area').append(`    <div class="kt-widget5__item" ><div class="kt-widget5__content">
                                    
                                    <div class="kt-widget5__section">
                                        <a href="#" class="kt-widget5__title">
                                            ${provider.name}
                                        </a>
                                        <p class="kt-widget5__desc">
                                            ${provider.location}
                                        </p>
                                        <div class="kt-widget5__info">
                                            <span>Distance:</span>
                                            <span class="kt-font-info" >${provider.distance}</span>
                                        
                                        </div>
                                    </div>
                                </div>
                                <div class="kt-widget5__content">
                                    
                                </div></div>`)
}

 

Комментарии:

1. Объекты не отсортированы. Ваш ответ — это объект. Но похоже, что вы заказали ключи?

2. Я думаю, что это сортировка на основе идентификаторов во внешнем интерфейсе

Ответ №1:

Поскольку объекты не отсортированы в javascript, вы можете попытаться отсортировать их следующим образом

 //Assume variable data contains the response data

//convert the object of objects to array of objects 
let arr = Object.keys(data).map((key) => data[key]);

//Sort the array of objects by distance
let sorted = arr.sort((a,b) => a.distance - b.distance);

//use sorted in the function
$.each(sorted, function(index, provider) {
    
    embedData(index,provider)
        
});