#LearnedToday: Object.groupBy()

PHPz
リリース: 2024-08-26 21:39:08
オリジナル
913 人が閲覧しました

#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' }
];
ログイン後にコピー

古き良き古い方法 (reduce を使用)

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 サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート