0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Laravel】フロント(JavaScript)へ渡した配列のソートがリセットされる件について

0
Last updated at Posted at 2023-09-07

概要

コレクション配列をソートして、フロント(JavaScript)へ渡した際にソートは正しく実行されているはずが、データを受け取るとソートがリセットされてしまう問題に直面しました。

原因

コレクション配列は値をキーと共に保持し、通常は0から始まる連続した数値インデックスを持ちます。

しかし、ソートした場合インデックスはリセットされないので、正しくソートされていたとしてもJavaScriptでデータを受け取るときには、そのインデックスで再度並び替えられてしまいソートがリセットされてしまいます。

解決策

この問題を解決するために、valuesメソッドを使用します。

このメソッドは、コレクション内のすべての値を新しい0から始まる連続した数値インデックスで再構築し、ソートを保持します。

以下のようなコレクションがあるとします。

$collection = collect([
    ['name' => 'E. Haaland', 'score' => 85],
    ['name' => 'Messhi', 'score' => 92],
    ['name' => 'Neymar', 'score' => 78],
]);

このコレクションをスコアの降順でソートした場合

$sortedCollection = $collection->sortByDesc('score');

$sortedCollectionは次のようになります。

Illuminate\Support\Collection 
[items:protected] => Array
        (
            [1] => Array
                (
                    [name] => Messhi
                    [score] => 92
                )

            [0] => Array
                (
                    [name] => E. Haaland
                    [score] => 85
                )

            [2] => Array
                (
                    [name] => Neymar
                    [score] => 78
                )

        )

ソートされたコレクションを見てみると、キー(インデックス)がリセットされていません。

そこで、valuesメソッドを使用して次のようにインデックスを再構築することができます。

$sortedCollection->values();

$sortedCollectionは次のようになり、キーが再構築されたデータが格納されています。

Illuminate\Support\Collection 
[items:protected] => Array
        (
            [0] => Array
                (
                    [name] => Messhi
                    [score] => 92
                )

            [1] => Array
                (
                    [name] => E. Haaland
                    [score] => 85
                )

            [2] => Array
                (
                    [name] => Neymar
                    [score] => 78
                )

        )

valuesメソッドをソートされたコレクションに使用することで、インデックスが再構築されフロントでソートを維持したまま受け取ることができるようになります。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?