ホームページ  >  記事  >  ウェブフロントエンド  >  #LearnedToday: Object.groupBy()

#LearnedToday: Object.groupBy()

PHPz
PHPzオリジナル
2024-08-26 21:39:08886ブラウズ

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。