ホームページ > 記事 > ウェブフロントエンド > #LearnedToday: Object.groupBy()
?ついに出ましたね!オブジェクトの配列をフィールドの特定の値でグループ化するための醜いコードを記述する必要はもうありません!
2023 年後半から、groupBy() と呼ばれる Object 用の公式の静的メソッドが追加されました。
これは、配列などの Iterable と、要素ごとに実行される関数を受け入れ、その特定の要素の「カテゴリ」を返す必要があります。
このメソッドは、各キーが異なるカテゴリであり、その特定のカテゴリに属するオブジェクトの配列を含む新しいオブジェクトを返します。
注: 返されたオブジェクトと元の反復可能オブジェクトの要素は同じです (深いコピーではありません!)。要素の内部構造を変更すると、元の反復可能オブジェクトと返されたオブジェクトの両方に反映されます。
ニンジャ タートルズのすべてのキャラクターを年齢別にグループ化することがいかに簡単であるかを実際の例で見てみましょう。
const ninjaTurtlesCharacters = [ { age: 16, name: 'Michelangelo' }, { age: 16, name: 'Raffaello' }, { age: 16, name: 'Donatello' }, { age: 16, name: 'Leonardo' }, { age: 91, name: 'Splinter' }, { age: 25, name: 'Casey Jones' }, { age: 25, name: 'April O\'Neil' } ];
const ninjaTurtlesCharactersByAge = ninjaTurtlesCharacters.reduce( (groupedPeople, item) => ({ ...groupedPeople, [item.age]: groupedPeople[item.age] ? [...groupedPeople[item.age], item] : [item], }), {} );
const ninjaTurtlesCharactersByAgeNew = Object.groupBy( ninjaTurtlesCharacters, ({ age }) => age );
ヒント: オブジェクトの代わりにマップを返したい場合は、Map.groupBy() を使用します
{ "16": [ { age: 16, name: 'Michelangelo' }, { age: 16, name: 'Raffaello' }, { age: 16, name: 'Donatello' }, { age: 16, name: 'Leonardo' } ], "25": [ { age: 25, name: 'Casey Jones' }, { age: 25, name: 'April O\'Neil' } ], "91": [ { age: 91, name: 'Splinter' } ] }
???いつものように、コードで遊ぶための単純な Stackblitz プロジェクトを作成しました。
?ドキュメント: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/groupBy
ℹ ブラウザのサポート: https://caniuse.com/mdn-javascript_builtins_object_groupby
以上が#LearnedToday: Object.groupBy()の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。