Задать вопрос
JohnDaniels
@JohnDaniels

Как мне разобраться с сортировкой json?

Помогите, у меня уже голова кругом.

Задача: получить с сервера и отобразить массив данных, отсортированных по определенному полю.
На сервере работает laravel, на клиенте vuejs (если это имеет значение).

на сервере делаю так:

echo json_encode([
            'log'  => Log::all()->sortByDesc('id')->toArray()
        ]);


где id - автоинкремент в бд. То есть мне нужно просто вывести данные в обратном порядке.

Дальше я не понимаю что происходит. Отправляю запрос просто браузером:
6ecb3fc1c43545c8b3b4323f60e94126.png

То есть на экране браузера ответ отсортирован верно, от большего к меньшему. Но консоль эту сортировку не видит.

И на клиенте я делаю
this.log = response.body.log
и получаю в this.log данные из консоли, то есть в неверной сортировке.

В какую сторону думать?
  • Вопрос задан
  • 1367 просмотров
Подписаться 2 Оценить 2 комментария
Решения вопроса 1
gubin_niko
@gubin_niko
В данном случае виноват не backend и laravel, а ваш пробел в азах js, без обид))
Проведите эксперимент и выполните код:

var obj = {2:"два", 1:"один", 10:"десять", 0:"нуль"};
console.log(obj);

В каком бы порядке не разместили мы внутри объекта записи с числовым ключом, при выводе они будут отсортированы от меньшего к большему (потому что, как выше верно подметили в комментариях, объект не сортируется, а ключи выставляются по порядку).

Хотите сохранить порядок? Приведите ключ к строке, но простая строка с числом не спасёт, JS всё-равно сперва преобразует её к числу и опять отсортирует. Можно добавить любой строковой символ к ключу и записи в итоге сохранят свой порядок.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Alex_Wells
@Alex_Wells
PHP/Kotlin
Подписываюсь под решением Nik Gubin, но есть и другой вариант: сортировка на клиенте =)
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы