Допустим, вы из контроллера возвращали коллекцию моделей в JSON, вот так:
public function index() {
    $posts = Post::all();
    // что-то делаем с постами
    return response()->json($posts, 200);
}А на стороне фронт-энда работали с получившимся массивом, и всё было хорошо.
И вдруг в один не очень прекрасный день массив во фронт-энде внезапно превратился вот в такой объект:
{
    1: {id: 1, ...},
    2: {id: 5, ...},
    3: {id: 6, ...},
    4: {id: 12, ...},
    // ...
}И всякие там posts.forEach() во фронт-энде сломались.
В первую очередь, нужно посмотреть на методы коллеций, применяемые к $posts. Если вы использовали filter(), или forget(), или возможно reject(), то эти методы сохраняют ключи элементов получившейся коллекции в тех значениях, что были до изменений. То есть индексированный массив превращается в ассоциативный. Вот чтобы сохранить эти ключи, в JSON и отправляется такой дурацкий объект.
А чтобы сбросить ключи и снова сделать массив индексированным, нужно воспользоваться методом values():
public function index() {
    $posts = Post::all();
    $filtered_posts = $posts->filter(function (Post $post) {
        return $post->published;
    });
    return response()->json($fitlered_posts->values(), 200);
}



